{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 介绍：机器学习项目第二部分\n",
    "在该notebook中，我们研究一个有监督的回归机器学习问题。利用真实的纽约市建筑能源消耗数据，我们要预测建筑的能源之星的得分，并确定影响得分的因素。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 机器学习——工作流程\n",
    "1. 数据清洗与格式转换\n",
    "2. 探索性数据分析\n",
    "3. 特征工程与选择\n",
    "4. 建立基础模型，比较多种模型性能指标\n",
    "5. 模型超参数调参，针对问题进行优化\n",
    "6. 在测试集上评估最佳模型\n",
    "7. 尽可能解释模型结果\n",
    "8. 得出结论，并提交答案\n",
    "\n",
    "上一个notebook我们使用了第1-3步，还有一部分第步，该notebook我们着重了解第4-6步。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 载入工具包"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "\n",
    "# 消除警告，比如说提示版本升级之类的\n",
    "import warnings\n",
    "warnings.simplefilter('ignore')\n",
    "\n",
    "pd.set_option('display.max_columns', 60)  # 设置最大显示列为60\n",
    "\n",
    "# Matplotlib 可视化\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline\n",
    "\n",
    "plt.rcParams['font.size'] = 24  # 设置字体大小\n",
    "\n",
    "from IPython.core.pylabtools import figsize  # 设置画图大小\n",
    "\n",
    "import seaborn as sns  # 画图工具\n",
    "sns.set(font_scale=2)\n",
    "\n",
    "# 输入缺失值和缩放值\n",
    "from sklearn.preprocessing import Imputer, MinMaxScaler\n",
    "\n",
    "# 机器学习模型\n",
    "from sklearn.linear_model import LinearRegression\n",
    "from sklearn.ensemble import RandomForestRegressor, GradientBoostingRegressor\n",
    "from sklearn.svm import SVR\n",
    "from sklearn.neighbors import KNeighborsRegressor\n",
    "\n",
    "# 超参数调整\n",
    "from sklearn.model_selection import RandomizedSearchCV, GridSearchCV"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 读取数据\n",
    "读取上一个notebook处理好的数据。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Training Feature Size:  (6622, 64)\n",
      "Testing Feature Size:   (2839, 64)\n",
      "Training Labels Size:   (6622, 1)\n",
      "Testing Labels Size:    (2839, 1)\n"
     ]
    }
   ],
   "source": [
    "# Read in data into dataframes \n",
    "train_features = pd.read_csv('data/training_features.csv')\n",
    "test_features = pd.read_csv('data/testing_features.csv')\n",
    "train_labels = pd.read_csv('data/training_labels.csv')\n",
    "test_labels = pd.read_csv('data/testing_labels.csv')\n",
    "\n",
    "# Display sizes of data\n",
    "print('Training Feature Size: ', train_features.shape)\n",
    "print('Testing Feature Size:  ', test_features.shape)\n",
    "print('Training Labels Size:  ', train_labels.shape)\n",
    "print('Testing Labels Size:   ', test_labels.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Order</th>\n",
       "      <th>Property Id</th>\n",
       "      <th>DOF Gross Floor Area</th>\n",
       "      <th>Year Built</th>\n",
       "      <th>Number of Buildings - Self-reported</th>\n",
       "      <th>Occupancy</th>\n",
       "      <th>Site EUI (kBtu/ft²)</th>\n",
       "      <th>Weather Normalized Site Electricity Intensity (kWh/ft²)</th>\n",
       "      <th>Weather Normalized Site Natural Gas Intensity (therms/ft²)</th>\n",
       "      <th>Water Intensity (All Water Sources) (gal/ft²)</th>\n",
       "      <th>Latitude</th>\n",
       "      <th>Longitude</th>\n",
       "      <th>Community Board</th>\n",
       "      <th>Census Tract</th>\n",
       "      <th>log_Direct GHG Emissions (Metric Tons CO2e)</th>\n",
       "      <th>log_Water Intensity (All Water Sources) (gal/ft²)</th>\n",
       "      <th>Borough_Staten Island</th>\n",
       "      <th>Largest Property Use Type_Adult Education</th>\n",
       "      <th>Largest Property Use Type_Automobile Dealership</th>\n",
       "      <th>Largest Property Use Type_Bank Branch</th>\n",
       "      <th>Largest Property Use Type_College/University</th>\n",
       "      <th>Largest Property Use Type_Convenience Store without Gas Station</th>\n",
       "      <th>Largest Property Use Type_Courthouse</th>\n",
       "      <th>Largest Property Use Type_Distribution Center</th>\n",
       "      <th>Largest Property Use Type_Enclosed Mall</th>\n",
       "      <th>Largest Property Use Type_Financial Office</th>\n",
       "      <th>Largest Property Use Type_Hospital (General Medical &amp; Surgical)</th>\n",
       "      <th>Largest Property Use Type_Hotel</th>\n",
       "      <th>Largest Property Use Type_K-12 School</th>\n",
       "      <th>Largest Property Use Type_Library</th>\n",
       "      <th>...</th>\n",
       "      <th>Largest Property Use Type_Multifamily Housing</th>\n",
       "      <th>Largest Property Use Type_Museum</th>\n",
       "      <th>Largest Property Use Type_Non-Refrigerated Warehouse</th>\n",
       "      <th>Largest Property Use Type_Other</th>\n",
       "      <th>Largest Property Use Type_Other - Education</th>\n",
       "      <th>Largest Property Use Type_Other - Entertainment/Public Assembly</th>\n",
       "      <th>Largest Property Use Type_Other - Lodging/Residential</th>\n",
       "      <th>Largest Property Use Type_Other - Mall</th>\n",
       "      <th>Largest Property Use Type_Other - Public Services</th>\n",
       "      <th>Largest Property Use Type_Other - Recreation</th>\n",
       "      <th>Largest Property Use Type_Other - Services</th>\n",
       "      <th>Largest Property Use Type_Other - Specialty Hospital</th>\n",
       "      <th>Largest Property Use Type_Outpatient Rehabilitation/Physical Therapy</th>\n",
       "      <th>Largest Property Use Type_Parking</th>\n",
       "      <th>Largest Property Use Type_Performing Arts</th>\n",
       "      <th>Largest Property Use Type_Pre-school/Daycare</th>\n",
       "      <th>Largest Property Use Type_Refrigerated Warehouse</th>\n",
       "      <th>Largest Property Use Type_Repair Services (Vehicle, Shoe, Locksmith, etc.)</th>\n",
       "      <th>Largest Property Use Type_Residence Hall/Dormitory</th>\n",
       "      <th>Largest Property Use Type_Residential Care Facility</th>\n",
       "      <th>Largest Property Use Type_Restaurant</th>\n",
       "      <th>Largest Property Use Type_Retail Store</th>\n",
       "      <th>Largest Property Use Type_Self-Storage Facility</th>\n",
       "      <th>Largest Property Use Type_Senior Care Community</th>\n",
       "      <th>Largest Property Use Type_Social/Meeting Hall</th>\n",
       "      <th>Largest Property Use Type_Strip Mall</th>\n",
       "      <th>Largest Property Use Type_Supermarket/Grocery Store</th>\n",
       "      <th>Largest Property Use Type_Urgent Care/Clinic/Other Outpatient</th>\n",
       "      <th>Largest Property Use Type_Wholesale Club/Supercenter</th>\n",
       "      <th>Largest Property Use Type_Worship Facility</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>13276</td>\n",
       "      <td>5849784</td>\n",
       "      <td>90300.0</td>\n",
       "      <td>1950</td>\n",
       "      <td>1</td>\n",
       "      <td>100</td>\n",
       "      <td>126.0</td>\n",
       "      <td>5.2</td>\n",
       "      <td>1.2</td>\n",
       "      <td>99.41</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>6.088818</td>\n",
       "      <td>4.599253</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>7377</td>\n",
       "      <td>4398442</td>\n",
       "      <td>52000.0</td>\n",
       "      <td>1926</td>\n",
       "      <td>1</td>\n",
       "      <td>100</td>\n",
       "      <td>95.4</td>\n",
       "      <td>4.7</td>\n",
       "      <td>0.9</td>\n",
       "      <td>NaN</td>\n",
       "      <td>40.835496</td>\n",
       "      <td>-73.887745</td>\n",
       "      <td>3.0</td>\n",
       "      <td>161.0</td>\n",
       "      <td>5.384036</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>9479</td>\n",
       "      <td>4665374</td>\n",
       "      <td>104700.0</td>\n",
       "      <td>1954</td>\n",
       "      <td>1</td>\n",
       "      <td>100</td>\n",
       "      <td>40.4</td>\n",
       "      <td>3.8</td>\n",
       "      <td>0.3</td>\n",
       "      <td>NaN</td>\n",
       "      <td>40.663206</td>\n",
       "      <td>-73.949469</td>\n",
       "      <td>9.0</td>\n",
       "      <td>329.0</td>\n",
       "      <td>5.017280</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>14774</td>\n",
       "      <td>3393340</td>\n",
       "      <td>129333.0</td>\n",
       "      <td>1992</td>\n",
       "      <td>1</td>\n",
       "      <td>100</td>\n",
       "      <td>157.1</td>\n",
       "      <td>16.9</td>\n",
       "      <td>1.1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>40.622968</td>\n",
       "      <td>-74.078742</td>\n",
       "      <td>1.0</td>\n",
       "      <td>27.0</td>\n",
       "      <td>6.510853</td>\n",
       "      <td>NaN</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>3286</td>\n",
       "      <td>2704325</td>\n",
       "      <td>109896.0</td>\n",
       "      <td>1927</td>\n",
       "      <td>1</td>\n",
       "      <td>100</td>\n",
       "      <td>62.3</td>\n",
       "      <td>3.5</td>\n",
       "      <td>0.0</td>\n",
       "      <td>28.65</td>\n",
       "      <td>40.782421</td>\n",
       "      <td>-73.972622</td>\n",
       "      <td>7.0</td>\n",
       "      <td>165.0</td>\n",
       "      <td>6.123589</td>\n",
       "      <td>3.355153</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 64 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   Order  Property Id  DOF Gross Floor Area  Year Built  \\\n",
       "0  13276      5849784               90300.0        1950   \n",
       "1   7377      4398442               52000.0        1926   \n",
       "2   9479      4665374              104700.0        1954   \n",
       "3  14774      3393340              129333.0        1992   \n",
       "4   3286      2704325              109896.0        1927   \n",
       "\n",
       "   Number of Buildings - Self-reported  Occupancy  Site EUI (kBtu/ft²)  \\\n",
       "0                                    1        100                126.0   \n",
       "1                                    1        100                 95.4   \n",
       "2                                    1        100                 40.4   \n",
       "3                                    1        100                157.1   \n",
       "4                                    1        100                 62.3   \n",
       "\n",
       "   Weather Normalized Site Electricity Intensity (kWh/ft²)  \\\n",
       "0                                                5.2         \n",
       "1                                                4.7         \n",
       "2                                                3.8         \n",
       "3                                               16.9         \n",
       "4                                                3.5         \n",
       "\n",
       "   Weather Normalized Site Natural Gas Intensity (therms/ft²)  \\\n",
       "0                                                1.2            \n",
       "1                                                0.9            \n",
       "2                                                0.3            \n",
       "3                                                1.1            \n",
       "4                                                0.0            \n",
       "\n",
       "   Water Intensity (All Water Sources) (gal/ft²)   Latitude  Longitude  \\\n",
       "0                                          99.41        NaN        NaN   \n",
       "1                                            NaN  40.835496 -73.887745   \n",
       "2                                            NaN  40.663206 -73.949469   \n",
       "3                                            NaN  40.622968 -74.078742   \n",
       "4                                          28.65  40.782421 -73.972622   \n",
       "\n",
       "   Community Board  Census Tract  log_Direct GHG Emissions (Metric Tons CO2e)  \\\n",
       "0              NaN           NaN                                     6.088818   \n",
       "1              3.0         161.0                                     5.384036   \n",
       "2              9.0         329.0                                     5.017280   \n",
       "3              1.0          27.0                                     6.510853   \n",
       "4              7.0         165.0                                     6.123589   \n",
       "\n",
       "   log_Water Intensity (All Water Sources) (gal/ft²)  Borough_Staten Island  \\\n",
       "0                                           4.599253                      0   \n",
       "1                                                NaN                      0   \n",
       "2                                                NaN                      0   \n",
       "3                                                NaN                      1   \n",
       "4                                           3.355153                      0   \n",
       "\n",
       "   Largest Property Use Type_Adult Education  \\\n",
       "0                                          0   \n",
       "1                                          0   \n",
       "2                                          0   \n",
       "3                                          0   \n",
       "4                                          0   \n",
       "\n",
       "   Largest Property Use Type_Automobile Dealership  \\\n",
       "0                                                0   \n",
       "1                                                0   \n",
       "2                                                0   \n",
       "3                                                0   \n",
       "4                                                0   \n",
       "\n",
       "   Largest Property Use Type_Bank Branch  \\\n",
       "0                                      0   \n",
       "1                                      0   \n",
       "2                                      0   \n",
       "3                                      0   \n",
       "4                                      0   \n",
       "\n",
       "   Largest Property Use Type_College/University  \\\n",
       "0                                             0   \n",
       "1                                             0   \n",
       "2                                             0   \n",
       "3                                             0   \n",
       "4                                             0   \n",
       "\n",
       "   Largest Property Use Type_Convenience Store without Gas Station  \\\n",
       "0                                                  0                 \n",
       "1                                                  0                 \n",
       "2                                                  0                 \n",
       "3                                                  0                 \n",
       "4                                                  0                 \n",
       "\n",
       "   Largest Property Use Type_Courthouse  \\\n",
       "0                                     0   \n",
       "1                                     0   \n",
       "2                                     0   \n",
       "3                                     0   \n",
       "4                                     0   \n",
       "\n",
       "   Largest Property Use Type_Distribution Center  \\\n",
       "0                                              0   \n",
       "1                                              0   \n",
       "2                                              0   \n",
       "3                                              0   \n",
       "4                                              0   \n",
       "\n",
       "   Largest Property Use Type_Enclosed Mall  \\\n",
       "0                                        0   \n",
       "1                                        0   \n",
       "2                                        0   \n",
       "3                                        0   \n",
       "4                                        0   \n",
       "\n",
       "   Largest Property Use Type_Financial Office  \\\n",
       "0                                           0   \n",
       "1                                           0   \n",
       "2                                           0   \n",
       "3                                           0   \n",
       "4                                           0   \n",
       "\n",
       "   Largest Property Use Type_Hospital (General Medical & Surgical)  \\\n",
       "0                                                  0                 \n",
       "1                                                  0                 \n",
       "2                                                  0                 \n",
       "3                                                  0                 \n",
       "4                                                  0                 \n",
       "\n",
       "   Largest Property Use Type_Hotel  Largest Property Use Type_K-12 School  \\\n",
       "0                                0                                      0   \n",
       "1                                0                                      0   \n",
       "2                                0                                      0   \n",
       "3                                0                                      0   \n",
       "4                                0                                      0   \n",
       "\n",
       "   Largest Property Use Type_Library  ...  \\\n",
       "0                                  0  ...   \n",
       "1                                  0  ...   \n",
       "2                                  0  ...   \n",
       "3                                  0  ...   \n",
       "4                                  0  ...   \n",
       "\n",
       "   Largest Property Use Type_Multifamily Housing  \\\n",
       "0                                              1   \n",
       "1                                              1   \n",
       "2                                              1   \n",
       "3                                              0   \n",
       "4                                              1   \n",
       "\n",
       "   Largest Property Use Type_Museum  \\\n",
       "0                                 0   \n",
       "1                                 0   \n",
       "2                                 0   \n",
       "3                                 0   \n",
       "4                                 0   \n",
       "\n",
       "   Largest Property Use Type_Non-Refrigerated Warehouse  \\\n",
       "0                                                  0      \n",
       "1                                                  0      \n",
       "2                                                  0      \n",
       "3                                                  0      \n",
       "4                                                  0      \n",
       "\n",
       "   Largest Property Use Type_Other  \\\n",
       "0                                0   \n",
       "1                                0   \n",
       "2                                0   \n",
       "3                                0   \n",
       "4                                0   \n",
       "\n",
       "   Largest Property Use Type_Other - Education  \\\n",
       "0                                            0   \n",
       "1                                            0   \n",
       "2                                            0   \n",
       "3                                            0   \n",
       "4                                            0   \n",
       "\n",
       "   Largest Property Use Type_Other - Entertainment/Public Assembly  \\\n",
       "0                                                  0                 \n",
       "1                                                  0                 \n",
       "2                                                  0                 \n",
       "3                                                  0                 \n",
       "4                                                  0                 \n",
       "\n",
       "   Largest Property Use Type_Other - Lodging/Residential  \\\n",
       "0                                                  0       \n",
       "1                                                  0       \n",
       "2                                                  0       \n",
       "3                                                  0       \n",
       "4                                                  0       \n",
       "\n",
       "   Largest Property Use Type_Other - Mall  \\\n",
       "0                                       0   \n",
       "1                                       0   \n",
       "2                                       0   \n",
       "3                                       0   \n",
       "4                                       0   \n",
       "\n",
       "   Largest Property Use Type_Other - Public Services  \\\n",
       "0                                                  0   \n",
       "1                                                  0   \n",
       "2                                                  0   \n",
       "3                                                  0   \n",
       "4                                                  0   \n",
       "\n",
       "   Largest Property Use Type_Other - Recreation  \\\n",
       "0                                             0   \n",
       "1                                             0   \n",
       "2                                             0   \n",
       "3                                             0   \n",
       "4                                             0   \n",
       "\n",
       "   Largest Property Use Type_Other - Services  \\\n",
       "0                                           0   \n",
       "1                                           0   \n",
       "2                                           0   \n",
       "3                                           0   \n",
       "4                                           0   \n",
       "\n",
       "   Largest Property Use Type_Other - Specialty Hospital  \\\n",
       "0                                                  0      \n",
       "1                                                  0      \n",
       "2                                                  0      \n",
       "3                                                  0      \n",
       "4                                                  0      \n",
       "\n",
       "   Largest Property Use Type_Outpatient Rehabilitation/Physical Therapy  \\\n",
       "0                                                  0                      \n",
       "1                                                  0                      \n",
       "2                                                  0                      \n",
       "3                                                  0                      \n",
       "4                                                  0                      \n",
       "\n",
       "   Largest Property Use Type_Parking  \\\n",
       "0                                  0   \n",
       "1                                  0   \n",
       "2                                  0   \n",
       "3                                  0   \n",
       "4                                  0   \n",
       "\n",
       "   Largest Property Use Type_Performing Arts  \\\n",
       "0                                          0   \n",
       "1                                          0   \n",
       "2                                          0   \n",
       "3                                          0   \n",
       "4                                          0   \n",
       "\n",
       "   Largest Property Use Type_Pre-school/Daycare  \\\n",
       "0                                             0   \n",
       "1                                             0   \n",
       "2                                             0   \n",
       "3                                             0   \n",
       "4                                             0   \n",
       "\n",
       "   Largest Property Use Type_Refrigerated Warehouse  \\\n",
       "0                                                 0   \n",
       "1                                                 0   \n",
       "2                                                 0   \n",
       "3                                                 0   \n",
       "4                                                 0   \n",
       "\n",
       "   Largest Property Use Type_Repair Services (Vehicle, Shoe, Locksmith, etc.)  \\\n",
       "0                                                  0                            \n",
       "1                                                  0                            \n",
       "2                                                  0                            \n",
       "3                                                  0                            \n",
       "4                                                  0                            \n",
       "\n",
       "   Largest Property Use Type_Residence Hall/Dormitory  \\\n",
       "0                                                  0    \n",
       "1                                                  0    \n",
       "2                                                  0    \n",
       "3                                                  0    \n",
       "4                                                  0    \n",
       "\n",
       "   Largest Property Use Type_Residential Care Facility  \\\n",
       "0                                                  0     \n",
       "1                                                  0     \n",
       "2                                                  0     \n",
       "3                                                  0     \n",
       "4                                                  0     \n",
       "\n",
       "   Largest Property Use Type_Restaurant  \\\n",
       "0                                     0   \n",
       "1                                     0   \n",
       "2                                     0   \n",
       "3                                     0   \n",
       "4                                     0   \n",
       "\n",
       "   Largest Property Use Type_Retail Store  \\\n",
       "0                                       0   \n",
       "1                                       0   \n",
       "2                                       0   \n",
       "3                                       0   \n",
       "4                                       0   \n",
       "\n",
       "   Largest Property Use Type_Self-Storage Facility  \\\n",
       "0                                                0   \n",
       "1                                                0   \n",
       "2                                                0   \n",
       "3                                                0   \n",
       "4                                                0   \n",
       "\n",
       "   Largest Property Use Type_Senior Care Community  \\\n",
       "0                                                0   \n",
       "1                                                0   \n",
       "2                                                0   \n",
       "3                                                1   \n",
       "4                                                0   \n",
       "\n",
       "   Largest Property Use Type_Social/Meeting Hall  \\\n",
       "0                                              0   \n",
       "1                                              0   \n",
       "2                                              0   \n",
       "3                                              0   \n",
       "4                                              0   \n",
       "\n",
       "   Largest Property Use Type_Strip Mall  \\\n",
       "0                                     0   \n",
       "1                                     0   \n",
       "2                                     0   \n",
       "3                                     0   \n",
       "4                                     0   \n",
       "\n",
       "   Largest Property Use Type_Supermarket/Grocery Store  \\\n",
       "0                                                  0     \n",
       "1                                                  0     \n",
       "2                                                  0     \n",
       "3                                                  0     \n",
       "4                                                  0     \n",
       "\n",
       "   Largest Property Use Type_Urgent Care/Clinic/Other Outpatient  \\\n",
       "0                                                  0               \n",
       "1                                                  0               \n",
       "2                                                  0               \n",
       "3                                                  0               \n",
       "4                                                  0               \n",
       "\n",
       "   Largest Property Use Type_Wholesale Club/Supercenter  \\\n",
       "0                                                  0      \n",
       "1                                                  0      \n",
       "2                                                  0      \n",
       "3                                                  0      \n",
       "4                                                  0      \n",
       "\n",
       "   Largest Property Use Type_Worship Facility  \n",
       "0                                           0  \n",
       "1                                           0  \n",
       "2                                           0  \n",
       "3                                           0  \n",
       "4                                           0  \n",
       "\n",
       "[5 rows x 64 columns]"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_features.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 缺失值填充\n",
    "\n",
    "一般缺失值我们建议在入模前填充，当然现在的XGBoost和LightGBM等都自带处理缺失值，如XGBoost把缺失值当做稀疏矩阵来对待，本身的在节点分裂时不考虑的缺失值的数值。缺失值数据会被分到左子树和右子树分别计算损失，选择较优的那一个。但一般来讲我们都需要处理缺失值。\n",
    "\n",
    "上一个notebook我们直接删除了50%缺失率以上的特征，在这里我们将重点关注如何处理这些缺失值的填充，填充的方法有很多种，这里使用简单的中位数填充（[这里有关于缺失值填充更深入的探讨](http://www.stat.columbia.edu/~gelman/arm/missing.pdf)）。\n",
    "\n",
    "利用sklearn的 Imputer object来进行缺失值填充，测试集则使用训练集训练的结果进行填充，尽可能的不要利用测试集的数据对测试集加工，因为一开始我们也是不知道的，否则将造成数据“泄露”，可参考[Data Leagage](https://www.kaggle.com/dansbecker/data-leakage)。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Create an imputer object with a median filling strategy\n",
    "imputer = Imputer(strategy = 'median')\n",
    "\n",
    "# Train on the training features\n",
    "imputer.fit(train_features)\n",
    "\n",
    "# Transform both training data and testing data\n",
    "X = imputer.transform(train_features)\n",
    "X_test = imputer.transform(test_features)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Missing values in training features: 0\n",
      "Missing values in testing features: 0\n"
     ]
    }
   ],
   "source": [
    "print('Missing values in training features:', np.sum(np.isnan(X)))\n",
    "print('Missing values in testing features:',np.sum(np.isnan(X_test)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(array([], dtype=int64), array([], dtype=int64))\n",
      "(array([], dtype=int64), array([], dtype=int64))\n"
     ]
    }
   ],
   "source": [
    "# Make sure all values are finite\n",
    "print(np.where(~np.isfinite(X)))\n",
    "print(np.where(~np.isfinite(X_test)))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 特征缩放\n",
    "\n",
    "在构建模型之前，我们要做的最后一步是缩放特征。这是必要的，因为特征是在不同的单位，我们要规范化的特征，使单位不影响算法（具体可参考[回归分析中汽车案例](https://github.com/ben1234560/AiLearning-Theory-Applying/blob/master/notebook_%E5%BF%85%E5%A4%87%E6%95%B0%E5%AD%A6%E5%9F%BA%E7%A1%80/%E5%9B%9E%E5%BD%92%E5%88%86%E6%9E%90%E7%AB%A0%E8%8A%82/%E6%A1%88%E4%BE%8B%EF%BC%9A%E6%B1%BD%E8%BD%A6%E4%BB%B7%E6%A0%BC%E9%A2%84%E6%B5%8B%E4%BB%BB%E5%8A%A1.ipynb)）。\n",
    "\n",
    "线性回归和随机森林不需要特征标度，但其他方法，如支持向量机和k近邻法，则需要它，因为它们考虑了观测值之间的欧几里德距离。因此，当我们比较多个算法时，最好是缩放特征。\n",
    "\n",
    "缩放的方式有两种：\n",
    "* 对于每个值，减去特征的平均值，除以特征的标准差。这就是所谓的标准化，每个特征的平均值为0，标准差为1。\n",
    "* 对于每个值，减去特征的最小值，除以特征的最小值减去特征的最小值(范围)。这确保了特征的所有值都在0到1之间，并被缩放到范围或归一化。\n",
    "\n",
    "与缺失值填充一样，当我们训练缩放对象时，我们只希望使用训练集进行训练。当转换特征时，我们将同时转换训练集和测试集。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Create the scaler object with a range of 0-1\n",
    "scaler = MinMaxScaler(feature_range=(0, 1))\n",
    "\n",
    "# Fit on the training data\n",
    "scaler.fit(X)\n",
    "\n",
    "# Transform both training data and testing data\n",
    "X = scaler.transform(X)\n",
    "X_test = scaler.transform(X_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Convert y to one-dimensional array (vector)\n",
    "y = np.array(train_labels).reshape((-1, ))\n",
    "y_test = np.array(test_labels).reshape((-1, ))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 选择的机器学习算法（回归问题）\n",
    "    1. Linear Regression 线性回归\n",
    "    2. Support Vector Machine Regression 支持向量机回归\n",
    "    3. Random Forest Regression随机森林回归\n",
    "    4. Gradient Boosting Regression GBDT回归\n",
    "    5. K-Nearest Neighbors Regression K近邻回归\n",
    "\n",
    "这里先使用默认参数，后续再调参"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Function to calculation mean absolute error\n",
    "def mae (y_true,y_pred):\n",
    "    return np.mean(abs(y_true - y_pred))\n",
    "\n",
    "# Takes in a model, trains the model, and evaluates the model on the test set\n",
    "def fit_and_evaluate(model):\n",
    "    \n",
    "    # Train the model\n",
    "    model.fit(X,y)\n",
    "    \n",
    "    # Make predictions and evalute\n",
    "    model_pred = model.predict(X_test)\n",
    "    model_mae = mae(y_test,model_pred)\n",
    "    \n",
    "    # Return the performance metric\n",
    "    return model_mae"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Linear Regression Performance on the test set: MAE = 13.4651\n"
     ]
    }
   ],
   "source": [
    "lr = LinearRegression()\n",
    "lr_mae = fit_and_evaluate(lr)\n",
    "\n",
    "print('Linear Regression Performance on the test set: MAE = %0.4f'% lr_mae)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Support Vector Machine Regression Performance on the test set: MAE = 10.9337\n"
     ]
    }
   ],
   "source": [
    "svm = SVR(C=1000,gamma =0.1)\n",
    "svm_mae = fit_and_evaluate(svm)\n",
    "\n",
    "print('Support Vector Machine Regression Performance on the test set: MAE = %0.4f' % svm_mae)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Random Forest Regression Performance on the test set: MAE = 10.0073\n"
     ]
    }
   ],
   "source": [
    "random_forest = RandomForestRegressor(random_state = 60)\n",
    "random_forest_mae = fit_and_evaluate(random_forest)\n",
    "\n",
    "print('Random Forest Regression Performance on the test set: MAE = %0.4f' % random_forest_mae)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Gradient Boosted Regression Performance on the test set: MAE = 10.0144\n"
     ]
    }
   ],
   "source": [
    "gradient_boosted = GradientBoostingRegressor(random_state=60)\n",
    "gradient_boosted_mae = fit_and_evaluate(gradient_boosted)\n",
    "\n",
    "print('Gradient Boosted Regression Performance on the test set: MAE = %0.4f' % gradient_boosted_mae)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "K-Nearest Neighbors Regression Performance on the test set: MAE = 13.0131\n"
     ]
    }
   ],
   "source": [
    "knn = KNeighborsRegressor(n_neighbors=10)\n",
    "knn_mae = fit_and_evaluate(knn)\n",
    "\n",
    "print('K-Nearest Neighbors Regression Performance on the test set: MAE = %0.4f' % knn_mae)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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58/nq6++4rPPPiMxMZEWLVqQPXt2QkJCmDFjRqprLF++nIkTJ/KPf/yDDz/8kJs3bzJ69GiCgoJM6g0fPpxJkyZhZWVF8+bNad68OdmyZWPFihX06dMn1XVXrFjBxo0badGiBW+//Tbly5dPVefevXv06dOHtWvXGs//nXfeYf369fj6+nLjxg2jbsr83127dlGpUiXjg8bMmTP597//zf37902ufefOHbp27cqJEydo3LgxNWrU4M8//6R3796cO3cuw9fmWV6L48eP0717dywtLWnRogUlS5Zk48aN9OrVi8TExMfe72mFhITQp08fTp8+Tb169WjWrBmXL19m4MCBLF682KgXExNDz5492bVrFx988AHt2rXD3d2dkJAQevbsSUJCAlZWVvj6+hq98f/6179o2LDhE8Xh5eWFjY0NYWFhqcpCQ0PJly9fmq99iq1bt3Lr1i3q1q0LQO3atbGysmLVqlUmf6/lzaQeThF5JrVq1WLt2rVs3brVZM7Xpk2bcHR0pFKlSvzyyy8m50RHRzNlyhQKFCjAzJkzcXV1BeDu3bv079+fDRs2UK1aNRo1asStW7eMYew5c+aQP39+AFq3bk23bt1SxTNu3DguX77MhAkTTHp4lixZwsSJE5k1axa9e/d+qjZeunQJgCJFijzVeQcOHGDx4sW89dZbTJ061UhEr127Ro8ePVi0aBHVqlXjvffeM87566+/THoLmzdvTqtWrVi1ahXt27fH398fSF7Z27RpU9avX0+/fv1M7nvs2DG++uorateuDUCXLl2MuXQNGjSgSJEiHDp0iNDQUBo0aMDo0aONc+Pj4+nYsSNHjx4lKioKd3d3o+zatWssWrQowzmbe/bs4fjx4/j6+prMYwwODmbq1KmsX7+eVq1aERsby9ixY7Gzs2PmzJmUKVPGuP/o0aNZt24dixYtMukRu3HjBu+88w5ff/21seK5RIkSzJw5kzVr1qT5fnie1+LkyZP06tWLTz75BEheBNe7d292797Nvn37+OCDD9K939OKjo5m8uTJlChRgu+//54cOXIA0L17d/z8/Pjuu+/w9PTE3d2ddevWcfnyZcaMGUP9+vWNa4wdO5ZVq1axb98+PDw86Nq1K7t27eLSpUt07tw53RGBRzk5OfHBBx+wc+dO4uLijB70+Ph4tmzZQqNGjTI8/+HhdICcOXNS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ZXJenz59KFOmDEuXLmXdunVYW1tTunRpBg4c+Njvln5WDRs2xNXVleDgYG7cuMFbb73FiBEjjC19ADw9Pfnyyy9ZuHAh69atw87ODldXVwYNGkT58uX55JNP2LFjh8k+j0/CxsaGyZMns3DhQrZs2UJISAi2traUL1+eTp06mQzJent7M2vWLObOncvOnTu5f/8+bm5u9O7dmzZt2rzwPRcz47V4Gp06daJ48eL89NNPhIaGkpiYSOHChenfvz8tWrQw3ls5c+bkhx9+YO7cufz+++/s2bMHJycnqlevjq+vL0WLFjWu6evry5kzZ9i5cyfnz59/6oSzVq1aTJkyhTx58mT4FbUpe28+rpe4cOHCvPvuuxw4cIANGzbQrFkzo+zRXvFH5c6dWwlnFmBx/fp1bf8vIvIaS/lqyzZt2qTaDF5E5FWgOZwiIiIiYlZKOEVERETErJRwioiIiIhZaQ6niIiIiJiVejhFRERExKyUcIqIiIiIWSnhFBERERGzUsIpksWdOHEis0PI8vSMzUvP1/z0jM3vTX/GSjhFRERExKyUcIqIiIiIWSnhFBERERGzUsIpIiIiImalhFNEREREzEoJp4iIiIiYlRJOERERETErJZwiIiIiYlbWmR2AiIiIvL6SkpK4c+cO8fHxmR3KK83Ozo4bN25kdhhPzMLCAjs7O7Jly/ZCrqeEU14J4xs3zuwQsqy7d+9ib2+f2WFkaXrG5qXna3538+Zl5Pz5T31eUlIS169fx9HREQcHBywsLF58cFmEra0tdnZ2mR3GE0tMTOTOnTvExcWRPXv2535tlXDKK2Hsb79ldggiIm+s/u+990zn3blzB0dHxxfWCyavDktLS5ycnLhz5w737t177mRZczhFRETkmcTHx2NjY5PZYYgZ2dvbc+/evee+jhJOEREReWYaRs/aXtTrq4RTRERERMxKCaeIiIiImNUbu2jIx8eHCxcuGL9bWFiQPXt23n33XQYOHEj+/PnNct8mTZrg5+dHkyZNzHL9FKtXr2b06NFpln311VfUrl3brPd/VHR0NJGRkXh6er7U+4qIiEjme2MTTgB/f3/q168PJC//j4yM5OuvvyYgIICZM2dmcnTPz8XFhYULF6Y6niNHjpcey9ixY6lQoYISThERkTfQG51wOjo64uLiYvyeL18+unXrxsiRI4mNjcXJySkT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jBjBuHHjaNOmDS4uLjRr1gxra2siIiLw8vJi4MCBTJgwgd69e5MjRw4+/vhjpk6dmua1Ro0axcSJE43FMh4eHgwYMOCJ2lCyZEkqV65M165dGTt2LN7e3qnqhIaGEhoaCvz/PUCbNm2Kr68vkLwR/eTJk5k6dSqLFy+mQIEC+Pv706xZMyB54/iYmBiCgoK4cuUKpUuXZtq0aZQoUQKAiRMnMnnyZDp06ICtrS1169alS5cuADRu3JiwsDDat2/P+vXrM2xrjhw5mDp1KuPGjaNDhw5UrFiRhg0bPtFzEBERkazH4vr169rRWzKdc86cmR2CiMgbq/977zHy/zo0xDze9EVDWWJIXUREREReXUo4RURERMSslHCKiIiIiFkp4RQRERERs1LCKSIiIiJmlSW2RZLX3/Bq1TI7hCzr7t27xj6vYh56xual5/sS5M2b2RFIFqeEU14JA9esyewQsqw3fSuOl0HP2Lz0fM3vxIkTmR2CZHEaUhcRERERs1LCKSIiIiJmpYRTRERERMxKCaeIiIiImJUSThERERExKyWcIiIiImJWSjhFRERExKyUcIqIiIiIWSnhFBERERGzUsIpIiIiImalhFNEREREzEoJp4iIiIiYlRJOERERETErJZwiIiIiYlZKOEVERETErJRwioiIiIhZKeEUEREREbNSwikiIiIiZqWEU0RERETMSgmniIiIiJiVEk4RERERMSvrzA5ABGB848aZHUKWdffuXezt7TM7jCxNz9i89HzN71V4xjYlStBn6tRMjUHMRwmnvBLG/vZbZocgIiKZaHhmByBmpSF1ERERETErJZwiIiIiYlZKOEVERETErJRwioiIiIhZPTbhjI+PZ86cOXz00UdUq1aNxo0bExgYyNWrV19GfM8kIiKCAwcOpDp++/ZtvLy8WLZsWZrnffvtt3Ts2PG57793715OnTr13NdJ4eHhgYeHB9HR0anKfv75Zzw8PJg5c+Zz38fPzy/D63h4eLBnz57nvo+IiIi8WR6bcM6YMYP169czePBgli1bxtixYzl58iR9+vQhKSnpZcT41AYOHEhUVFSq446OjlSvXp2wsLBUZUlJSYSGhlK/fv3nvn+PHj24cuXKc1/nYdbW1mzbti3V8S1btmBhYfFC75WetWvXUrFixZdyLxEREck6Hptwrlq1iq5du1KpUiUKFixI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BMqbwfn/pmeIiMibaXi1agxcsyazwzAbzeEUERERETEjJZwiIiIiYlYvZQw75esQ0/L+++9nWC4iIiIirzf1cIqIiIiIWSnhFBERERGz0rJweSUMr1Yts0PIsu7evYu9vX1mh5Gl6Rmbl56v+b0Kz9imRIlMvb+YlxJOeSVk5a0wMtubvhXHy6BnbF56vuanZyzmpiF1ERERETErJZwiIiIiYlZKOEVERETErJRwioiIiIhZKeEUEREREbNSwikiIiIiZqWEU0RERETMSgmniIiIiJiVEk4RERERMSslnCIiIiJiVko4RURERMSslHCKiIiIiFkp4RQRERERs1LCKSIiIiJmpYRTRERERMxKCaeIiIiImJUSThERERExKyWcIiIiImJWSjhFRERExKyUcIqIiIiIWSnhFBERERGzUsIpIiIiImZlndkBiACMb9w4s0PIsu7evYu9vX1mh5Gl6Rmbl56v+ekZm9+LesY2JUrQZ+rUFxDRy6WEU14JY3/7LbNDEBEReeUNz+wAnpGG1EVERETErJRwioiIiIhZKeEUEREREbNSwikiIiIiZvVSE04PDw/27NljcuzAgQN4eXkxYcKEdM/z8fGhc+fOJCUlmRzft28fHh4exMfHmyXe5xEREcGBAwfSLDt//jweHh5MmzYtVVlQUBCfffbZE93jRdb18/Nj5syZT3QtERERkaeRqT2cJ06coH///tStW5f+/ftnWDc8PJxffvnlJUX2/AYOHEhUVFSGdX766SdOnTr1zPfo0KFDhom6iIiIyKsg0xLO6Oho/P398fDwYNiwYVhYWGRYv2DBgnz33Xdcv379JUVofnnz5uWbb7555vMdHBxwdnZ+gRGJiIiIvHiZknBevXqV3r17U7JkScaMGYOVldVjz2nXrh2Ojo5pDkOniI2NJSAgAG9vbxo0aEBgYCC3b982yrdt28Ynn3yCp6cn3t7eDB06lNjYWCB5yLl///50796d2rVrs3PnTu7fv8+kSZOoV68ederUYciQIVy5csW43rJly2jWrBmenp60a9eObdu2AcnD0xcuXCAwMJBRo0alG2+fPn34888/WbNmTbp1Tp06Rffu3fHy8uKjjz5i8eLFxtSCR4fJd+3aRdu2bfHy8sLf35/x48eb3D8+Pp4JEybg7e1N/fr1WbRokcm9YmJi6N69O56ennTu3Jkz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O3PkyBGWLl1KfHw806ZNo0qVKjz11FPFeRoPrS1btrB9+3bGjBlD5cqVjT+PL1++DJj3b/Pmzfn000/ZtWsXiYmJzJo1iytXrtClS5fiPA2LsEpNTTVfJSzygKSnpzNz5ky2bduGk5MTQUFBBAUFAeDr60toaCidOnUC4OjRo7z33nvGZx6OGzeOevXqFWf6D7358+ezYsWKfI/t3r2bZs2amfTx6tWrWbVqFefOncPb25vhw4ffdVRJ4Pjx40RGRnL06FHKlStH9+7dee2117CystJ1/ID4+/vz3nvvmd3Ne3v/6hq+d76+vixcuND4RItLly4xffp09u3bh5ubG0OGDOG5554DICUlhW7duvHBBx/wxBNPADd+lkRERHD27FkaNGjAhAkTqF69erGdz8Pm1v4dP348sbGxZjGVK1cmJibGrH9zcnL46KOP2LhxI6mpqTRo0IBRo0ZRu3btYjgTy1LBKSIiIiIWpSl1EREREbEoFZwiIiIiYlEqOEVERETEolRwioiIiIhFqeAUEREREYtSwSkiIiVeft8DLiIPDxWcIiJ/wZAhQ/D19eWVV14pMCYyMhJfX1+GDBlShJndm+effx5fX1/27duX7/GuXbsSGhpaJLn8lc+6evUqYWFh/Pzzz/f9+WFhYfj6+t7xJSJ/je3dQ0REJD/W1tYcP36cpKQkPD09TY7l5eWxdevWYsqscPbv309ycjLe3t58+eWXJbKgiouL4+uvvzY+uPx+VahQwezrM0Xk/qngFBH5i+rWrUtSUhJbt25lwIABJsf+85//cPnyZWrWrFlM2d3dhg0beOyxx+jcuTPz5s3j/PnzVKpUqbjTKlZ2dnY0atSouNMQKXU0pS4i8hfZ29vTvHnzfEcyN2/eTNOmTXF2djY7tnHjRl566SX8/Pzo1KkTixYtMn638k3bt28nODiYli1b4ufnR69evfj888+Nx1NSUvD19WXbtm28++67BAYGEhgYyIQJE4zf23wn169f5/vvv6d58+a0adMGa2trvvrqq3xjc3JyiIiIoHXr1jz77LNMmjSJixcvGo9nZGQwd+5cOnfujJ+fHz169CAqKors7GxjzLVr14iMjKR79+40b96cF198kfXr198xR19fXz744AOTfevXr8fX15eUlBRiYmJ4/fXXAXjzzTcJCwszxhWmj+/HkCFDmDRpEu+++y4BAQEMGDDA+H/y+eef89JLL+Hv72/8Pzt27BjDhw+nTZs2BAYGMmLECE6ePGls75dffsHX15evvvqK7t2707JlS7Zt2/bA8hUpbio4RUTuQ9u2bTl58iSJiYnGfdnZ2cTGxtKuXTuz+H/9619MnToVHx8fZs+ezQsvvMCqVatM1i7++OOPjB07Fm9vb2bOnMmMGTN49NFHmTt3Lvv37zdpb/r06ZQvX54ZM2YwaNAgtm/fzrx58+6a95YtW0hLS6NDhw64urri7+/P+vXrycnJMYuNjY3lwIEDTJgwgTfffJNdu3YxZswY4/G5c+eybds2Bg8eTEREBO3bt+ejjz5i+fLlAKSnpzNo0CC+/vprevfuzaxZs/Dx8WHGjBlER0ffvZML0KxZM0aNGgXAiBEj6N+/P1C4Pr6T7OzsfF+5ubkmcVu2bCEzM5NZs2YZPxvg/fffp0ePHkyePJlmzZrx888/89prr5GZmcnbb7/N+PHjOXv2LAMHDiQ+Pt6kzQULFjB48GDGjBlD48aN/3LfiDxsNKUuInIfmjZtSvny5dm6dSuvvfYaAHv27CErKwt/f39Wr15tjL127RoIXAQxAAAHEklEQVRLliyhc+fOvP322wD4+flRuXJlQkNDOXjwID4+Ppw6dYq2bdsybtw443sbNmxI27Zt+eWXX0ymfJ966iljXNOmTTl+/Dg//PDDXfPesGEDjRs3pnr16gB07tyZ2NhYdu7cScuWLU1iy5Urx8KFCylXrhwAbm5ujB07ll27duHn58f+/ftp1qwZnTp1Am6MTDo5OVGhQgUAYmJiOHXqFIsXL6ZJkybG887JyWHZsmX07NnTGHsv3NzcqF27NgDe3t54enoWuo8Lcu7cOZo1a5bvsaCgIIYPH27czsvLIzQ01NgvKSkpALRo0YJevXoZ40JDQ6lWrRrvv/8+trY3fu02bdqUHj16sHjxYmbPnm2M7datG+3bt7/nvhB52KngFBG5D3Z2dgQEBJgUnN999x0tWrTAwcHBJPbQoUOkp6cTEBBgMt3s7++PtbU1e/fuxcfHh1dffRW4MTKYlJREcnIyR48eBTCbFr59vWGVKlVIS0u7Y84Gg4HDhw8zduxY/vzzT+BGQevm5sYXX3xhVnD6+fkZiyq4UVDZ2Niwb98+/Pz88PX1ZfXq1Zw/fx4/Pz+aNm1KUFCQMf7XX3+lcuXKxmLzpo4dOxITE8OhQ4do0aLFHXMurML2cUHc3NwKHCF+5JFHTLarVq1q0i83eXt7G/+dlpbG0aNH6devn7HYBHB2dsbf35+dO3eavPdmAS1S2qjgFBG5T23atCEmJgaDwUDVqlXZsWMH06dPN4v7448/ABg9enS+7Zw/fx6A1NRUZs+ebVzD5+HhYSwsb3/epL29vcm2lZXVXZ9JuWHDBgBmz55tMroGsG/fPpKTk/Hw8DDuu73Qsra2xtXVlatXrwIQEhJC1apV+eabbwgPDycvL4+6desyatQoGjduzJUrV3BzczPL42a7N9t5EArbxwWxtbWlfv36hfqs2/slv/1Xr14lLy8v39hHHnmEa9euFapNkZJOBaeIyH166qmncHV1ZevWrdSsWRM7Ozuefvpps7ibo2GTJ0+mRo0aZsddXV0BmDhxIgaDgUWLFtGgQQPKlClDenr6XW+yKYzs7Gy+/fZbWrRoQZ8+fUyOXblyhdGjR7Nu3Treeustk/23t5GammqcBre1tSUoKIigoCAuXbrE7t27+eijjxgzZgzffvstzs7OJCQkmOVys/i7ed75uX3d5PXr1+94foXt46JSvnx5rKysTG6yuun8+fO4uLgUaT4ixUU3DYmI3CdbW1sCAwOJjY1l69attGrVymT69KabxePvv/9O/fr1jS8nJyfmz5+PwWAAbjwfMyAggCZNmlCmTBkAdu3aBdz/N+rs3LmTS5cu0b17dxo1amTyatGiBQ0bNmTjxo1kZGQY37Nnzx4yMzON27GxseTk5PDkk0+Snp5Oz549+de//gXcmJLu1KkTPXv25MqVK1y/fp0mTZpw7tw5fv31V5NcNm3ahI2NDQ0aNMg3VycnJ86ePWuy7/Y2rK1Nf40Vto+LiqOjI/Xq1eP77783meK/evUqu3btomHDhkWaj0hx0QiniMgD0LZtW9atW0diYiILFy7MN8bV1ZW+ffuyZMkSrl69ylNPPcWlS5eIjo4mIyODevXqATeKpu+++4569epRuXJlDh48yPLly7Gysrrr+sy72bBhAy4uLvmOwMKNdZUzZszg+++/p0OHDsCNaerRo0fTu3dvkpOTWbx4MU8++STPPPMMVlZW1KtXj+joaKytralTpw5nzpxhxYoVPPnkk7i6utKpUyfWrFnDuHHjGDRoEO7u7uzYsYONGzfSv3//Akf5WrRowZYtW6hfvz61atUiNjaWw4cPm8SUL18egN27d/PII4/g7e1dqD4uSFZWltmTAG7l7e1t/MzCGjp0KMOHD2fYsGG88MILZGVl8cknn5CRkcGgQYPuqS2RkkoFp4jIA9C4cWMqVaqElZXVHR9nExwcTMWKFVmzZg2ff/455cuX54knnuD11183rnMMDQ0lPDzcePOKp6cn48ePZ8uWLXcshu7m/Pnz7Nmzhy5duuQ7AgvQunVr5s2bx9q1a40FZ/fu3cnIyGDChAnY2NjQrl073nrrLaysrACYMGECH374IatXr+bChQu4uLgQEBDA0KFDAXBwcODDDz9k0aJFLF26lGvXruHp6ck777xDt27dCsw3JCSEnJwcoqKisLKywt/fnwkTJpisz6xVqxbPPfcca9euJSEhgcjIyEL1cUEuX75McHBwgcfnz59P06ZN79jG7Xx9fVm4cCFRUVGEhoZiZ2dH48aNCQsL001C8rdhlZqaen/zMyIiIiIid6A1nCIiIiJiUSo4RURERMSiVHCKiIiIiEWp4BQRERERi1LBKSIiIiIWpYJTRERERCxKBaeIiIiIWJQKThERERGxKBWcIiIiImJR/w8NR99xBPZ7NgAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 576x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.style.use('fivethirtyeight')\n",
    "figsize(8, 4)\n",
    "\n",
    "# Dataframe to hold the results\n",
    "model_comparison = pd.DataFrame({'model':['Linear Regression',\n",
    "                                          'Support Vector Machine',\n",
    "                                          'Random Forest',\n",
    "                                          'Gradient Boosted',\n",
    "                                          'K-Nearest Neighbors'],\n",
    "                                'mae':[lr_mae,\n",
    "                                       svm_mae,\n",
    "                                       random_forest_mae, \n",
    "                                       gradient_boosted_mae, \n",
    "                                       knn_mae]})\n",
    "# Horizontal bar chart of test mae\n",
    "model_comparison.sort_values('mae',ascending = False).plot(x = 'model',\n",
    "                                                           y = 'mae',\n",
    "                                                           kind = 'barh',\n",
    "                                                           color = 'red', \n",
    "                                                           edgecolor = 'black')\n",
    "# Plot formatting\n",
    "plt.ylabel('');plt.yticks(size = 14);plt.xlabel('Mean Absolute Error');plt.xticks(size = 14)\n",
    "plt.title('Model Comparison on Test MAE', size = 20);"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "随机森林跟集成算法GBDT的效果较好，这里由于参数只使用默认的，对SVM等这种参数影响较大的模型不太公平。\n",
    "\n",
    "当然，从这些结果，我们可以得出结论，机器学习是适用的，因为所有的模型都显著地优于基线！\n",
    "\n",
    "这里我们还没有使用XGBoost/LightGBM，从算法公式层面来讲，XGBoost/LightGBM是优于GBDT，也是GB以及GBDT基础上的优化和改进，下面我们也小试一下XGBoost还有LightGBM。当然，这里是以GBDT作为提升算法的代表。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "注：为什么随机森林模型没有像GBDT一样不断优化发展出新算法，随机森林有如下局限性\n",
    "\n",
    "* 1.构建方式：随机森林使用自助采样（Bootstrap Sampling）和随机特征选择来构建多个决策树，然后进行平均或投票来获得最终的预测。相比之下，GBDT使用迭代的方式，每次迭代都试图纠正前一轮的误差，因此更复杂。\n",
    "\n",
    "* 2.算法性质：GBDT是一个梯度提升算法，它在每轮迭代中学习如何修正先前模型的错误。这种性质使得它更容易实现各种优化技巧，如自动特征选择、提前停止等。\n",
    "\n",
    "* 3.随机性差异：虽然随机森林在构建树时引入了随机性，但相对于GBDT，其模型的构建过程较为稳定。GBDT的迭代过程更加灵活，但也更容易过拟合，因此需要更多的正则化和优化。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[15:35:29] WARNING: C:/Jenkins/workspace/xgboost-win64_release_0.90/src/objective/regression_obj.cu:152: reg:linear is now deprecated in favor of reg:squarederror.\n",
      "XGBoost Regression Performance on the test set: MAE = 9.9936\n"
     ]
    }
   ],
   "source": [
    "import xgboost as xgb\n",
    "xgb_model = xgb.XGBRegressor()\n",
    "xgb_mae = fit_and_evaluate(xgb_model)\n",
    "\n",
    "print('XGBoost Regression Performance on the test set: MAE = %0.4f' % xgb_mae)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "lightgbm Regression Performance on the test set: MAE = 9.3751\n"
     ]
    }
   ],
   "source": [
    "import lightgbm as lgb\n",
    "lgb_model = lgb.LGBMRegressor()\n",
    "lgb_mae = fit_and_evaluate(lgb_model)\n",
    "print('lightgbm Regression Performance on the test set: MAE = %0.4f' % lgb_mae)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "可以看到XGBoost和LightGBM明显是由于GBDT，因为该两者和随机森林时间隔得有点远，这么比较明显不公平，所以还是以GBDT做模型。实际场景中，我们推荐XGBoost和LightGBM，哪个好用哪个。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 模型优化——超参数调优\n",
    "\n",
    "**在机器学习中，优化模型意味着为一个特定的问题找到一组最佳的超参数。**\n",
    "\n",
    "* 模型超参数被认为是机器学习算法的最佳参数，由数据科学家在训练前对其进行调整。例如随机林中的树数，或K近邻回归中使用的邻居数。\n",
    "* 模型参数是模型在训练过程中学习到的，例如线性回归中的权重。\n",
    "\n",
    "**[调整模型超参数](http://scikit-learn.org/stable/modules/grid_search.html)控制模型中欠拟合与过拟合的平衡。**\n",
    "\n",
    "* 我们可以尝试通过建立一个更复杂的模型来纠正欠拟合，例如在随机森林中使用更多的树，或者在神经网络中使用更多的层。欠拟合的模型具有很高的偏差，当我们的模型没有足够的能力（自由度）来学习特征和目标之间的关系时，就会出现这种情况。\n",
    "* 我们可以尝试通过限制模型的复杂性和应用正则化来纠正过度拟合。这可能意味着减少多项式回归的次数，或者在神经网络中减少网络层次等。过度拟合的模型具有很高的方差，并且实际上已经记住了训练集。欠拟合和过拟合都会导致测试集的泛化性能较差。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 基于随机搜索和交叉验证的参数调优\n",
    "\n",
    "* 随机搜索指的是我们选择超参数进行评估的方法：定义一系列选项，然后随机选择组合进行尝试。这与网格搜索形成对比，网格搜索评估我们指定的每个组合。一般来说，当我们对最佳模型超参数的知识有限时，随机搜索会更好，我们可以使用随机搜索缩小选项范围，然后使用网格搜索来选择范围更有限的选项。\n",
    "\n",
    "* 交叉验证是用来评估超参数性能的方法。我们使用K-Fold交叉验证，而不是将训练集分成单独的训练集和验证集，从而减少我们可以使用的训练数据量。这意味着将训练数据分成K个折叠，然后经过一个迭代过程，我们首先对K-1个折叠进行训练，然后在第K个折叠上评估性能。我们重复这个过程K次，所以最终我们将在训练数据中的每个例子上进行测试，关键是我们要测试的每个迭代都是在我们没有训练的数据上进行的。在K次交叉验证结束时，我们将K次迭代的平均误差作为最终的性能度量，对所有的训练数据进行训练。然后，我们记录的性能用于比较超参数的不同组合。\n",
    "\n",
    "使用k=5进行k折交叉验证的图片如下所示：\n",
    "\n",
    "<img src=\"data/kfold_cv.png\" width=\"70%\">\n",
    "\n",
    "我们将实现随机搜索和交叉验证，以选择最佳的超参数的GBDT回归。我们首先定义一个网格，然后形成一个迭代过程：从网格中随机抽取一组超参数，使用4折交叉验证评估超参数，然后选择性能最好的超参数。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 设置相关参数\n",
    "# 要优化的损失函数\n",
    "loss = ['ls','lad','huber']\n",
    "\n",
    "# 梯度增强过程中使用的树的数量\n",
    "n_estimators = [100,500, 900, 1100,1500]\n",
    "\n",
    "#  树的最大深度\n",
    "max_depth = [2,3,5,10,15]\n",
    "\n",
    "# 每片叶子的最小样本数\n",
    "min_samples_leaf = [1,2,4,6,8]\n",
    "\n",
    "# 拆分节点的最小样本数\n",
    "min_samples_split = [2, 4, 6, 10]\n",
    "\n",
    "# 进行拆分时要考虑的最大特征数\n",
    "max_features = ['auto', 'sqrt', 'log2', None]\n",
    "\n",
    "# 定义要进行搜索的超参数网格\n",
    "hyperparameter_grid = {'loss': loss,\n",
    "                       'n_estimators': n_estimators,\n",
    "                       'max_depth': max_depth,\n",
    "                       'min_samples_leaf': min_samples_leaf,\n",
    "                       'min_samples_split': min_samples_split,\n",
    "                       'max_features': max_features}  "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "我们选择了6个不同的超参数来调节GBDT回归。这些都会以不同的方式影响模型，而这些方式很难提前确定，要找到针对特定问题的最佳组合，唯一的方法就是测试它们！要了解超参数，建议查看[Scikit Learn文档](https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.GradientBoostingRegressor.html#sklearn.ensemble.GradientBoostingRegressor)。现在，只要知道我们正在努力寻找超参数的最佳组合，因为没有理论告诉我们哪一个最有效，我们只需要评估它们，就像运行一个实验一样！\n",
    "\n",
    "我们创建随机搜索对象，并传入以下参数：\n",
    "\n",
    "* `estimator`:所选的模型\n",
    "* `param_distributions`:我们定义的参数分布\n",
    "* `cv`: 用于k-fold交叉验证的折叠数\n",
    "* `n_iter`:要尝试的不同组合的数量\n",
    "* `scoring`：评估使用的指标\n",
    "* `n_jobs`：并行运行的内核数（-1将使用所有可用的）\n",
    "* `verbose`：显示参数信息（1显示有限数量）\n",
    "* `return_train_score`：返回每个交叉验证折叠的训练分数\n",
    "* `random_state`：使用的固定的随机数种子数，以便每次拆分的数据相同\n",
    "\n",
    "随机搜索对象的训练方法与任何其他scikit学习模型的方法相同。训练后，我们可以比较所有不同的超参数组合，找出性能最好的一个。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 随机搜索"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Create the model to use for hyperparameter tuning\n",
    "model = GradientBoostingRegressor(random_state = 42)\n",
    "\n",
    "# Set up the random search with 4-fold cross validation\n",
    "random_cv = RandomizedSearchCV(estimator=model,\n",
    "                               param_distributions=hyperparameter_grid,\n",
    "                               cv=4, n_iter=25, \n",
    "                               scoring = 'neg_mean_absolute_error',\n",
    "                               n_jobs = -1, verbose = 1, \n",
    "                               return_train_score = True,\n",
    "                               random_state=42)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Fitting 4 folds for each of 25 candidates, totalling 100 fits\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "[Parallel(n_jobs=-1)]: Using backend LokyBackend with 4 concurrent workers.\n",
      "[Parallel(n_jobs=-1)]: Done  42 tasks      | elapsed:  5.6min\n",
      "[Parallel(n_jobs=-1)]: Done 100 out of 100 | elapsed:  8.8min finished\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "RandomizedSearchCV(cv=4, error_score='raise-deprecating',\n",
       "                   estimator=GradientBoostingRegressor(alpha=0.9,\n",
       "                                                       criterion='friedman_mse',\n",
       "                                                       init=None,\n",
       "                                                       learning_rate=0.1,\n",
       "                                                       loss='ls', max_depth=3,\n",
       "                                                       max_features=None,\n",
       "                                                       max_leaf_nodes=None,\n",
       "                                                       min_impurity_decrease=0.0,\n",
       "                                                       min_impurity_split=None,\n",
       "                                                       min_samples_leaf=1,\n",
       "                                                       min_samples_split=2,\n",
       "                                                       min_weight_fraction_leaf=0.0,\n",
       "                                                       n_estimators=100,...\n",
       "                   iid='warn', n_iter=25, n_jobs=-1,\n",
       "                   param_distributions={'loss': ['ls', 'lad', 'huber'],\n",
       "                                        'max_depth': [2, 3, 5, 10, 15],\n",
       "                                        'max_features': ['auto', 'sqrt', 'log2',\n",
       "                                                         None],\n",
       "                                        'min_samples_leaf': [1, 2, 4, 6, 8],\n",
       "                                        'min_samples_split': [2, 4, 6, 10],\n",
       "                                        'n_estimators': [100, 500, 900, 1100,\n",
       "                                                         1500]},\n",
       "                   pre_dispatch='2*n_jobs', random_state=42, refit=True,\n",
       "                   return_train_score=True, scoring='neg_mean_absolute_error',\n",
       "                   verbose=1)"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Fit on the training data\n",
    "random_cv.fit(X, y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>mean_fit_time</th>\n",
       "      <th>std_fit_time</th>\n",
       "      <th>mean_score_time</th>\n",
       "      <th>std_score_time</th>\n",
       "      <th>param_n_estimators</th>\n",
       "      <th>param_min_samples_split</th>\n",
       "      <th>param_min_samples_leaf</th>\n",
       "      <th>param_max_features</th>\n",
       "      <th>param_max_depth</th>\n",
       "      <th>param_loss</th>\n",
       "      <th>params</th>\n",
       "      <th>split0_test_score</th>\n",
       "      <th>split1_test_score</th>\n",
       "      <th>split2_test_score</th>\n",
       "      <th>split3_test_score</th>\n",
       "      <th>mean_test_score</th>\n",
       "      <th>std_test_score</th>\n",
       "      <th>rank_test_score</th>\n",
       "      <th>split0_train_score</th>\n",
       "      <th>split1_train_score</th>\n",
       "      <th>split2_train_score</th>\n",
       "      <th>split3_train_score</th>\n",
       "      <th>mean_train_score</th>\n",
       "      <th>std_train_score</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>10.512508</td>\n",
       "      <td>0.161444</td>\n",
       "      <td>0.021770</td>\n",
       "      <td>0.001280</td>\n",
       "      <td>500</td>\n",
       "      <td>6</td>\n",
       "      <td>6</td>\n",
       "      <td>None</td>\n",
       "      <td>5</td>\n",
       "      <td>lad</td>\n",
       "      <td>{'n_estimators': 500, 'min_samples_split': 6, ...</td>\n",
       "      <td>-8.924621</td>\n",
       "      <td>-8.775078</td>\n",
       "      <td>-9.325044</td>\n",
       "      <td>-9.037550</td>\n",
       "      <td>-9.015523</td>\n",
       "      <td>0.201467</td>\n",
       "      <td>1</td>\n",
       "      <td>-6.934705</td>\n",
       "      <td>-6.837958</td>\n",
       "      <td>-6.869084</td>\n",
       "      <td>-6.840749</td>\n",
       "      <td>-6.870624</td>\n",
       "      <td>0.038950</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>11.610687</td>\n",
       "      <td>0.557825</td>\n",
       "      <td>0.034470</td>\n",
       "      <td>0.010364</td>\n",
       "      <td>500</td>\n",
       "      <td>6</td>\n",
       "      <td>8</td>\n",
       "      <td>None</td>\n",
       "      <td>5</td>\n",
       "      <td>huber</td>\n",
       "      <td>{'n_estimators': 500, 'min_samples_split': 6, ...</td>\n",
       "      <td>-8.872382</td>\n",
       "      <td>-8.903982</td>\n",
       "      <td>-9.317120</td>\n",
       "      <td>-9.075047</td>\n",
       "      <td>-9.042086</td>\n",
       "      <td>0.176489</td>\n",
       "      <td>2</td>\n",
       "      <td>-4.384343</td>\n",
       "      <td>-4.326121</td>\n",
       "      <td>-4.823009</td>\n",
       "      <td>-4.229809</td>\n",
       "      <td>-4.440820</td>\n",
       "      <td>0.227453</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>9.308119</td>\n",
       "      <td>0.115381</td>\n",
       "      <td>0.019372</td>\n",
       "      <td>0.002762</td>\n",
       "      <td>500</td>\n",
       "      <td>4</td>\n",
       "      <td>2</td>\n",
       "      <td>auto</td>\n",
       "      <td>3</td>\n",
       "      <td>huber</td>\n",
       "      <td>{'n_estimators': 500, 'min_samples_split': 4, ...</td>\n",
       "      <td>-9.062297</td>\n",
       "      <td>-9.042221</td>\n",
       "      <td>-9.439618</td>\n",
       "      <td>-9.153004</td>\n",
       "      <td>-9.174248</td>\n",
       "      <td>0.158764</td>\n",
       "      <td>3</td>\n",
       "      <td>-6.955777</td>\n",
       "      <td>-7.088986</td>\n",
       "      <td>-6.913108</td>\n",
       "      <td>-6.940327</td>\n",
       "      <td>-6.974550</td>\n",
       "      <td>0.067813</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2.768650</td>\n",
       "      <td>0.022904</td>\n",
       "      <td>0.010735</td>\n",
       "      <td>0.006010</td>\n",
       "      <td>100</td>\n",
       "      <td>2</td>\n",
       "      <td>6</td>\n",
       "      <td>auto</td>\n",
       "      <td>5</td>\n",
       "      <td>ls</td>\n",
       "      <td>{'n_estimators': 100, 'min_samples_split': 2, ...</td>\n",
       "      <td>-9.100775</td>\n",
       "      <td>-9.026372</td>\n",
       "      <td>-9.457063</td>\n",
       "      <td>-9.201235</td>\n",
       "      <td>-9.196321</td>\n",
       "      <td>0.162799</td>\n",
       "      <td>4</td>\n",
       "      <td>-7.302003</td>\n",
       "      <td>-7.312645</td>\n",
       "      <td>-7.173397</td>\n",
       "      <td>-7.386171</td>\n",
       "      <td>-7.293554</td>\n",
       "      <td>0.076569</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>5.052495</td>\n",
       "      <td>0.146989</td>\n",
       "      <td>0.016706</td>\n",
       "      <td>0.003104</td>\n",
       "      <td>500</td>\n",
       "      <td>4</td>\n",
       "      <td>6</td>\n",
       "      <td>auto</td>\n",
       "      <td>3</td>\n",
       "      <td>ls</td>\n",
       "      <td>{'n_estimators': 500, 'min_samples_split': 4, ...</td>\n",
       "      <td>-9.147703</td>\n",
       "      <td>-9.199053</td>\n",
       "      <td>-9.698781</td>\n",
       "      <td>-9.358627</td>\n",
       "      <td>-9.350987</td>\n",
       "      <td>0.215296</td>\n",
       "      <td>5</td>\n",
       "      <td>-7.089709</td>\n",
       "      <td>-7.103749</td>\n",
       "      <td>-7.021418</td>\n",
       "      <td>-7.080088</td>\n",
       "      <td>-7.073741</td>\n",
       "      <td>0.031358</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19</th>\n",
       "      <td>12.648192</td>\n",
       "      <td>0.497953</td>\n",
       "      <td>0.025433</td>\n",
       "      <td>0.002286</td>\n",
       "      <td>1100</td>\n",
       "      <td>6</td>\n",
       "      <td>2</td>\n",
       "      <td>auto</td>\n",
       "      <td>3</td>\n",
       "      <td>lad</td>\n",
       "      <td>{'n_estimators': 1100, 'min_samples_split': 6,...</td>\n",
       "      <td>-9.350800</td>\n",
       "      <td>-9.382812</td>\n",
       "      <td>-9.475236</td>\n",
       "      <td>-9.291753</td>\n",
       "      <td>-9.375148</td>\n",
       "      <td>0.066368</td>\n",
       "      <td>6</td>\n",
       "      <td>-8.513004</td>\n",
       "      <td>-8.658903</td>\n",
       "      <td>-7.820534</td>\n",
       "      <td>-8.017995</td>\n",
       "      <td>-8.252609</td>\n",
       "      <td>0.344461</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>62.647066</td>\n",
       "      <td>2.078449</td>\n",
       "      <td>0.127230</td>\n",
       "      <td>0.011548</td>\n",
       "      <td>1100</td>\n",
       "      <td>10</td>\n",
       "      <td>6</td>\n",
       "      <td>None</td>\n",
       "      <td>10</td>\n",
       "      <td>huber</td>\n",
       "      <td>{'n_estimators': 1100, 'min_samples_split': 10...</td>\n",
       "      <td>-9.274382</td>\n",
       "      <td>-9.242743</td>\n",
       "      <td>-9.530568</td>\n",
       "      <td>-9.475944</td>\n",
       "      <td>-9.380872</td>\n",
       "      <td>0.124366</td>\n",
       "      <td>7</td>\n",
       "      <td>-0.409811</td>\n",
       "      <td>-0.459465</td>\n",
       "      <td>-0.393491</td>\n",
       "      <td>-0.370483</td>\n",
       "      <td>-0.408312</td>\n",
       "      <td>0.032671</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>39.648134</td>\n",
       "      <td>1.619497</td>\n",
       "      <td>0.063250</td>\n",
       "      <td>0.002862</td>\n",
       "      <td>500</td>\n",
       "      <td>4</td>\n",
       "      <td>2</td>\n",
       "      <td>auto</td>\n",
       "      <td>10</td>\n",
       "      <td>huber</td>\n",
       "      <td>{'n_estimators': 500, 'min_samples_split': 4, ...</td>\n",
       "      <td>-9.415934</td>\n",
       "      <td>-9.291198</td>\n",
       "      <td>-9.575363</td>\n",
       "      <td>-9.429866</td>\n",
       "      <td>-9.428068</td>\n",
       "      <td>0.100721</td>\n",
       "      <td>8</td>\n",
       "      <td>-0.205702</td>\n",
       "      <td>-0.193613</td>\n",
       "      <td>-0.164415</td>\n",
       "      <td>-0.141062</td>\n",
       "      <td>-0.176198</td>\n",
       "      <td>0.025235</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16</th>\n",
       "      <td>17.596702</td>\n",
       "      <td>0.263915</td>\n",
       "      <td>0.041574</td>\n",
       "      <td>0.001576</td>\n",
       "      <td>1500</td>\n",
       "      <td>4</td>\n",
       "      <td>6</td>\n",
       "      <td>None</td>\n",
       "      <td>3</td>\n",
       "      <td>ls</td>\n",
       "      <td>{'n_estimators': 1500, 'min_samples_split': 4,...</td>\n",
       "      <td>-9.248892</td>\n",
       "      <td>-9.316306</td>\n",
       "      <td>-9.798843</td>\n",
       "      <td>-9.427920</td>\n",
       "      <td>-9.447940</td>\n",
       "      <td>0.212403</td>\n",
       "      <td>9</td>\n",
       "      <td>-4.821677</td>\n",
       "      <td>-4.876202</td>\n",
       "      <td>-4.776650</td>\n",
       "      <td>-4.729506</td>\n",
       "      <td>-4.801009</td>\n",
       "      <td>0.054284</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>21</th>\n",
       "      <td>3.955678</td>\n",
       "      <td>0.036891</td>\n",
       "      <td>0.033909</td>\n",
       "      <td>0.007227</td>\n",
       "      <td>500</td>\n",
       "      <td>6</td>\n",
       "      <td>4</td>\n",
       "      <td>log2</td>\n",
       "      <td>5</td>\n",
       "      <td>huber</td>\n",
       "      <td>{'n_estimators': 500, 'min_samples_split': 6, ...</td>\n",
       "      <td>-9.365194</td>\n",
       "      <td>-9.286988</td>\n",
       "      <td>-9.751767</td>\n",
       "      <td>-9.409179</td>\n",
       "      <td>-9.453243</td>\n",
       "      <td>0.177788</td>\n",
       "      <td>10</td>\n",
       "      <td>-5.733003</td>\n",
       "      <td>-5.742441</td>\n",
       "      <td>-5.571781</td>\n",
       "      <td>-5.666476</td>\n",
       "      <td>-5.678425</td>\n",
       "      <td>0.068177</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    mean_fit_time  std_fit_time  mean_score_time  std_score_time  \\\n",
       "12      10.512508      0.161444         0.021770        0.001280   \n",
       "3       11.610687      0.557825         0.034470        0.010364   \n",
       "9        9.308119      0.115381         0.019372        0.002762   \n",
       "0        2.768650      0.022904         0.010735        0.006010   \n",
       "7        5.052495      0.146989         0.016706        0.003104   \n",
       "19      12.648192      0.497953         0.025433        0.002286   \n",
       "10      62.647066      2.078449         0.127230        0.011548   \n",
       "2       39.648134      1.619497         0.063250        0.002862   \n",
       "16      17.596702      0.263915         0.041574        0.001576   \n",
       "21       3.955678      0.036891         0.033909        0.007227   \n",
       "\n",
       "   param_n_estimators param_min_samples_split param_min_samples_leaf  \\\n",
       "12                500                       6                      6   \n",
       "3                 500                       6                      8   \n",
       "9                 500                       4                      2   \n",
       "0                 100                       2                      6   \n",
       "7                 500                       4                      6   \n",
       "19               1100                       6                      2   \n",
       "10               1100                      10                      6   \n",
       "2                 500                       4                      2   \n",
       "16               1500                       4                      6   \n",
       "21                500                       6                      4   \n",
       "\n",
       "   param_max_features param_max_depth param_loss  \\\n",
       "12               None               5        lad   \n",
       "3                None               5      huber   \n",
       "9                auto               3      huber   \n",
       "0                auto               5         ls   \n",
       "7                auto               3         ls   \n",
       "19               auto               3        lad   \n",
       "10               None              10      huber   \n",
       "2                auto              10      huber   \n",
       "16               None               3         ls   \n",
       "21               log2               5      huber   \n",
       "\n",
       "                                               params  split0_test_score  \\\n",
       "12  {'n_estimators': 500, 'min_samples_split': 6, ...          -8.924621   \n",
       "3   {'n_estimators': 500, 'min_samples_split': 6, ...          -8.872382   \n",
       "9   {'n_estimators': 500, 'min_samples_split': 4, ...          -9.062297   \n",
       "0   {'n_estimators': 100, 'min_samples_split': 2, ...          -9.100775   \n",
       "7   {'n_estimators': 500, 'min_samples_split': 4, ...          -9.147703   \n",
       "19  {'n_estimators': 1100, 'min_samples_split': 6,...          -9.350800   \n",
       "10  {'n_estimators': 1100, 'min_samples_split': 10...          -9.274382   \n",
       "2   {'n_estimators': 500, 'min_samples_split': 4, ...          -9.415934   \n",
       "16  {'n_estimators': 1500, 'min_samples_split': 4,...          -9.248892   \n",
       "21  {'n_estimators': 500, 'min_samples_split': 6, ...          -9.365194   \n",
       "\n",
       "    split1_test_score  split2_test_score  split3_test_score  mean_test_score  \\\n",
       "12          -8.775078          -9.325044          -9.037550        -9.015523   \n",
       "3           -8.903982          -9.317120          -9.075047        -9.042086   \n",
       "9           -9.042221          -9.439618          -9.153004        -9.174248   \n",
       "0           -9.026372          -9.457063          -9.201235        -9.196321   \n",
       "7           -9.199053          -9.698781          -9.358627        -9.350987   \n",
       "19          -9.382812          -9.475236          -9.291753        -9.375148   \n",
       "10          -9.242743          -9.530568          -9.475944        -9.380872   \n",
       "2           -9.291198          -9.575363          -9.429866        -9.428068   \n",
       "16          -9.316306          -9.798843          -9.427920        -9.447940   \n",
       "21          -9.286988          -9.751767          -9.409179        -9.453243   \n",
       "\n",
       "    std_test_score  rank_test_score  split0_train_score  split1_train_score  \\\n",
       "12        0.201467                1           -6.934705           -6.837958   \n",
       "3         0.176489                2           -4.384343           -4.326121   \n",
       "9         0.158764                3           -6.955777           -7.088986   \n",
       "0         0.162799                4           -7.302003           -7.312645   \n",
       "7         0.215296                5           -7.089709           -7.103749   \n",
       "19        0.066368                6           -8.513004           -8.658903   \n",
       "10        0.124366                7           -0.409811           -0.459465   \n",
       "2         0.100721                8           -0.205702           -0.193613   \n",
       "16        0.212403                9           -4.821677           -4.876202   \n",
       "21        0.177788               10           -5.733003           -5.742441   \n",
       "\n",
       "    split2_train_score  split3_train_score  mean_train_score  std_train_score  \n",
       "12           -6.869084           -6.840749         -6.870624         0.038950  \n",
       "3            -4.823009           -4.229809         -4.440820         0.227453  \n",
       "9            -6.913108           -6.940327         -6.974550         0.067813  \n",
       "0            -7.173397           -7.386171         -7.293554         0.076569  \n",
       "7            -7.021418           -7.080088         -7.073741         0.031358  \n",
       "19           -7.820534           -8.017995         -8.252609         0.344461  \n",
       "10           -0.393491           -0.370483         -0.408312         0.032671  \n",
       "2            -0.164415           -0.141062         -0.176198         0.025235  \n",
       "16           -4.776650           -4.729506         -4.801009         0.054284  \n",
       "21           -5.571781           -5.666476         -5.678425         0.068177  "
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Get all of the cv results and sort by the test performance\n",
    "random_results = pd.DataFrame(random_cv.cv_results_).sort_values('mean_test_score', ascending = False)\n",
    "\n",
    "random_results.head(10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "GradientBoostingRegressor(alpha=0.9, criterion='friedman_mse', init=None,\n",
       "                          learning_rate=0.1, loss='lad', max_depth=5,\n",
       "                          max_features=None, max_leaf_nodes=None,\n",
       "                          min_impurity_decrease=0.0, min_impurity_split=None,\n",
       "                          min_samples_leaf=6, min_samples_split=6,\n",
       "                          min_weight_fraction_leaf=0.0, n_estimators=500,\n",
       "                          n_iter_no_change=None, presort='auto',\n",
       "                          random_state=42, subsample=1.0, tol=0.0001,\n",
       "                          validation_fraction=0.1, verbose=0, warm_start=False)"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "random_cv.best_estimator_"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "最佳GBDT模型具有以下超参数：\n",
    "* `loss = lad`\n",
    "* `n_estimators = 500`\n",
    "* `max_depth = 5`\n",
    "* `min_samples_leaf = 6`\n",
    "* `min_samples_split = 6`\n",
    "* `max_features = None` \n",
    "\n",
    "使用随机搜索是缩小可能的超参数范围的好方法。最初，我们不知道哪种组合最有效，现在缩小了选择范围。\n",
    "\n",
    "我们可以使用随机搜索的结果及其左右值加入到网格搜索，以找到超参数中比随机搜索的效果最好的那些。\n",
    "\n",
    "在这里，我们使用的网格搜索只测试n_estimators（树的个数），然后绘制训练和测试性能图，以了解增加树的数量对我们的模型有什么作用。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 网格搜索\n",
    "\n",
    "随机搜索找到一个大概的值，再用网格搜索更加精确的查找。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Create a range of trees to evaluate\n",
    "trees_grid = {'n_estimators': [100, 150, 200, 250, 300, 350, 400, 450, 500, 550, 600, 650, 700, 750, 800]}\n",
    "\n",
    "model = GradientBoostingRegressor(loss = 'lad', max_depth = 5,\n",
    "                                  min_samples_leaf = 6,\n",
    "                                  min_samples_split = 6,\n",
    "                                  max_features = None,\n",
    "                                  random_state = 42)\n",
    "\n",
    "# Grid Search Object using the trees range and the random forest model\n",
    "grid_search = GridSearchCV(estimator = model, param_grid=trees_grid, cv = 4, \n",
    "                           scoring = 'neg_mean_absolute_error', verbose = 1,\n",
    "                           n_jobs = -1, return_train_score = True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Fitting 4 folds for each of 15 candidates, totalling 60 fits\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "[Parallel(n_jobs=-1)]: Using backend LokyBackend with 4 concurrent workers.\n",
      "[Parallel(n_jobs=-1)]: Done  42 tasks      | elapsed:  1.3min\n",
      "[Parallel(n_jobs=-1)]: Done  60 out of  60 | elapsed:  2.2min finished\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "GridSearchCV(cv=4, error_score='raise-deprecating',\n",
       "             estimator=GradientBoostingRegressor(alpha=0.9,\n",
       "                                                 criterion='friedman_mse',\n",
       "                                                 init=None, learning_rate=0.1,\n",
       "                                                 loss='lad', max_depth=5,\n",
       "                                                 max_features=None,\n",
       "                                                 max_leaf_nodes=None,\n",
       "                                                 min_impurity_decrease=0.0,\n",
       "                                                 min_impurity_split=None,\n",
       "                                                 min_samples_leaf=6,\n",
       "                                                 min_samples_split=6,\n",
       "                                                 min_weight_fraction_leaf=0.0,\n",
       "                                                 n_estimators=100,\n",
       "                                                 n_iter_no_change=None,\n",
       "                                                 presort='auto',\n",
       "                                                 random_state=42, subsample=1.0,\n",
       "                                                 tol=0.0001,\n",
       "                                                 validation_fraction=0.1,\n",
       "                                                 verbose=0, warm_start=False),\n",
       "             iid='warn', n_jobs=-1,\n",
       "             param_grid={'n_estimators': [100, 150, 200, 250, 300, 350, 400,\n",
       "                                          450, 500, 550, 600, 650, 700, 750,\n",
       "                                          800]},\n",
       "             pre_dispatch='2*n_jobs', refit=True, return_train_score=True,\n",
       "             scoring='neg_mean_absolute_error', verbose=1)"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Fit the grid search\n",
    "grid_search.fit(X, y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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JBIJPv30U6xfvx4///wzFixYADc3NwDai/xNmzYN2dnZ6NGjB+zt7QFoA4tSqYSLiwtcXFwAaKeyWrZsiVOnTsHPzw8jR44EoD276ueff4ZarUb//v2LpGYiIiIqeYr93Sh9fX1x6dIlhIWFoWfPnmjUqBEEQUBkZCQeP36MevXq4auvvtJvP336dISHh8Pb29tgqmzixInw9vZGQEAAgoODUbVqVVy4cAEJCQlo1aoVevbsWdxPjYiIiF4RBQaczp07P/M0bB1BELBz506TtlUoFFi8eDGCgoKwd+9eREREQBRFVK5cGV988QX69esHGxubZ+6nYsWKWLNmDfz8/HDy5EncvXsXHh4e6NOnD/r27ct3EiciInqNFZgCmjZtanLAee4HlcnQt29f9O3b95nbFjY9Vr58eUydOrUoSyMiIiIrUGDAmTZtWnHWQURERFRknmse5/jx4wgPD8fjx4/h4uKChg0b4p133jHbSA8RERHRizAp4GRmZuL//u//cObMGUgkEri4uCA5ORkbNmxAo0aNsHDhQpPWzRAREREVB5Oug+Pn54eIiAhMnToVISEh2LdvH44fP44ffvgBly5dgr+/v7nrJCIiIjKZSQHn4MGD8Pb2RqdOnfRXGpbJZOjUqROGDh2KAwcOmLVIIiIioudhUsBJSUlBrVq1jPbVqlVL/95PRERERK8CkwJOpUqVcO7cOaN94eHhKF++fJEWRURERPQyTFpk3KNHD8ybNw+2trb46KOP4OrqisTEROzfvx9//vmn0TfjJCIiIrIUkwPO5cuX4efnh5UrV+rbRVFEp06dMGjQILMVSERERPS8TAo4EokE33//Pfr3749z584hNTUVzs7OePvtt+Hp6WnuGkuOrEzIg/ciu303gNcGIiIispjnutBf9erVUb16dQDA5cuXERMTg3LlysHR0dEsxZUkQkoSbBdMgfTGf0BaKrK7cVSLiIjIUkxaZJyUlIQxY8bor3ezdetWDB48GJMmTUKvXr0QExNjzhpfeZK7N2E3c6Q23ABQbAuA7NQhC1dFRET0+jIp4CxZsgSXL1+Gl5cXAGD16tVo3Lgx1qxZAw8PDyxdutSsRb7qRLkNBGWGQZvC/zdIrl60UEVERESvN5MCzqlTpzBmzBi0bt0aly9fRnx8PPr374/atWvj888/L/AU8teFWL4iMr76CaJM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VD0Qd+LJJ59k8ODBeHjc/gwIf39/1q1bh6tr5fpCqsjPUYi7Wo2aWLv2xdq1r+3v19P/XEnZ9kpLH3e2yNMVVUV/5iT6Mydh03doej1qs3Y3Xmm17ADOsglxRZMER1RpHh4ed5TcALi4uNC0adOyCUgIUfW518LavT/W7v1tf09PQx951P5KS59wrsjTFasV/enj6E8fh99W27aZaNHuz1danbG29Aejc/nfx11OEhxRoRISEhg6dCgDBw5kwIABfPrpp1y9epXmzZuzYsUKDAYDSUlJrFmzhv3795OYmIjVasXLy4vevXvz4osv4u3tbW+voDE4uWULFixAVVW++eYbTp8+jcFgoGvXrkyYMIGWLVva2yhoDE5u2ciRIxkyZAhLlizhyJEjmM1mWrVqxahRoxgwYEC++ztz5gzLly/nyJEjZGRk0KZNG8aMGcOJEydYunQpS5YsoVu3bvnOq4jPduLEiYSGhvL999/z4YcfcuLECerUqcO0adMICLB11R87doxvv/2Wo0ePcv36derVq0efPn0YPXo0Pj4+Jb6WENVKLY88e20pV1NtPTwnw9CfCit2N3XFarGN+YkKhw3foBmcUFu0t6/BY23RXhKeciAJjnCIyMhIduzYgb+/P82aNaNGjRoYDAZiYmIYP348V69epWXLlgQEBHDt2jWOHz/OL7/8QkhICN9//z01atQo9hobNmxg586dNGvWjN69e3Pq1Cl27NjBoUOHWLduHfXq1Su2jejoaF588UXc3d3p3LkzycnJhIeH884777BgwQL69+9vPzYsLIzJkyeTmZlJ27Zt6dSpE+Hh4bz++uu0bdu2iKuUrcI+21xTpkzBZDLRt29fTp48aY/tp59+4uOPP0ZVVTp06IC3tzfR0dH8/PPPbN26lUWLFuW7j8KuZbFYKux+hahoWm1PLL0Csfw5S0tJS7H17OSO4UmKK/J8xZJj6xGKPAqsQnNywtrC397Do7ZoB07GCriT6k0SnDvk/vwAR4dQKtdX/c/RIQC2AclPP/00kydPBkD9c42KRYsWcfXqVd544w2eeuop+/GpqamMHTuWuLg4du3alW+Ac0F27tzJlClTePzxxwHIyclh0qRJHDp0iF9//bVEs64OHDjAkCFDmDJlCs7Ott+wlixZwtdff833339vT3BycnJ47733yMzM5N1332Xo0KEA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\n",
      "text/plain": [
       "<Figure size 576x576 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Get the results into a dataframe\n",
    "results = pd.DataFrame(grid_search.cv_results_)\n",
    "\n",
    "# Plot the training and testing error vs number of trees\n",
    "figsize(8, 8)\n",
    "plt.style.use('fivethirtyeight')\n",
    "plt.plot(results['param_n_estimators'], -1 * results['mean_test_score'], label = 'Testing Error')\n",
    "plt.plot(results['param_n_estimators'], -1 * results['mean_train_score'], label = 'Training Error')\n",
    "plt.xlabel('Number of Trees'); plt.ylabel('Mean Abosolute Error'); plt.legend();\n",
    "plt.title('Performance vs Number of Trees');"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>mean_fit_time</th>\n",
       "      <th>std_fit_time</th>\n",
       "      <th>mean_score_time</th>\n",
       "      <th>std_score_time</th>\n",
       "      <th>param_n_estimators</th>\n",
       "      <th>params</th>\n",
       "      <th>split0_test_score</th>\n",
       "      <th>split1_test_score</th>\n",
       "      <th>split2_test_score</th>\n",
       "      <th>split3_test_score</th>\n",
       "      <th>mean_test_score</th>\n",
       "      <th>std_test_score</th>\n",
       "      <th>rank_test_score</th>\n",
       "      <th>split0_train_score</th>\n",
       "      <th>split1_train_score</th>\n",
       "      <th>split2_train_score</th>\n",
       "      <th>split3_train_score</th>\n",
       "      <th>mean_train_score</th>\n",
       "      <th>std_train_score</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>14.369840</td>\n",
       "      <td>0.281917</td>\n",
       "      <td>0.032413</td>\n",
       "      <td>0.004375</td>\n",
       "      <td>750</td>\n",
       "      <td>{'n_estimators': 750}</td>\n",
       "      <td>-8.901092</td>\n",
       "      <td>-8.751699</td>\n",
       "      <td>-9.298411</td>\n",
       "      <td>-9.049730</td>\n",
       "      <td>-9.000181</td>\n",
       "      <td>0.201836</td>\n",
       "      <td>1</td>\n",
       "      <td>-6.716494</td>\n",
       "      <td>-6.660453</td>\n",
       "      <td>-6.520818</td>\n",
       "      <td>-6.579989</td>\n",
       "      <td>-6.619438</td>\n",
       "      <td>0.074807</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>14.957021</td>\n",
       "      <td>0.327790</td>\n",
       "      <td>0.030169</td>\n",
       "      <td>0.001295</td>\n",
       "      <td>800</td>\n",
       "      <td>{'n_estimators': 800}</td>\n",
       "      <td>-8.903857</td>\n",
       "      <td>-8.758299</td>\n",
       "      <td>-9.296941</td>\n",
       "      <td>-9.047485</td>\n",
       "      <td>-9.001594</td>\n",
       "      <td>0.198793</td>\n",
       "      <td>2</td>\n",
       "      <td>-6.689643</td>\n",
       "      <td>-6.648109</td>\n",
       "      <td>-6.486269</td>\n",
       "      <td>-6.530287</td>\n",
       "      <td>-6.588577</td>\n",
       "      <td>0.083101</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>13.406416</td>\n",
       "      <td>0.316643</td>\n",
       "      <td>0.028174</td>\n",
       "      <td>0.001915</td>\n",
       "      <td>700</td>\n",
       "      <td>{'n_estimators': 700}</td>\n",
       "      <td>-8.904269</td>\n",
       "      <td>-8.755862</td>\n",
       "      <td>-9.312990</td>\n",
       "      <td>-9.053755</td>\n",
       "      <td>-9.006666</td>\n",
       "      <td>0.205811</td>\n",
       "      <td>3</td>\n",
       "      <td>-6.743886</td>\n",
       "      <td>-6.695770</td>\n",
       "      <td>-6.611240</td>\n",
       "      <td>-6.624919</td>\n",
       "      <td>-6.668953</td>\n",
       "      <td>0.053861</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>12.764133</td>\n",
       "      <td>0.196318</td>\n",
       "      <td>0.026181</td>\n",
       "      <td>0.000824</td>\n",
       "      <td>650</td>\n",
       "      <td>{'n_estimators': 650}</td>\n",
       "      <td>-8.906208</td>\n",
       "      <td>-8.755401</td>\n",
       "      <td>-9.325190</td>\n",
       "      <td>-9.052215</td>\n",
       "      <td>-9.009699</td>\n",
       "      <td>0.210186</td>\n",
       "      <td>4</td>\n",
       "      <td>-6.778068</td>\n",
       "      <td>-6.721452</td>\n",
       "      <td>-6.708191</td>\n",
       "      <td>-6.666758</td>\n",
       "      <td>-6.718617</td>\n",
       "      <td>0.039814</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>10.654021</td>\n",
       "      <td>0.313924</td>\n",
       "      <td>0.029671</td>\n",
       "      <td>0.008415</td>\n",
       "      <td>550</td>\n",
       "      <td>{'n_estimators': 550}</td>\n",
       "      <td>-8.918502</td>\n",
       "      <td>-8.756938</td>\n",
       "      <td>-9.325492</td>\n",
       "      <td>-9.042721</td>\n",
       "      <td>-9.010861</td>\n",
       "      <td>0.207970</td>\n",
       "      <td>5</td>\n",
       "      <td>-6.874737</td>\n",
       "      <td>-6.781878</td>\n",
       "      <td>-6.809121</td>\n",
       "      <td>-6.745712</td>\n",
       "      <td>-6.802862</td>\n",
       "      <td>0.047201</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    mean_fit_time  std_fit_time  mean_score_time  std_score_time  \\\n",
       "13      14.369840      0.281917         0.032413        0.004375   \n",
       "14      14.957021      0.327790         0.030169        0.001295   \n",
       "12      13.406416      0.316643         0.028174        0.001915   \n",
       "11      12.764133      0.196318         0.026181        0.000824   \n",
       "9       10.654021      0.313924         0.029671        0.008415   \n",
       "\n",
       "   param_n_estimators                 params  split0_test_score  \\\n",
       "13                750  {'n_estimators': 750}          -8.901092   \n",
       "14                800  {'n_estimators': 800}          -8.903857   \n",
       "12                700  {'n_estimators': 700}          -8.904269   \n",
       "11                650  {'n_estimators': 650}          -8.906208   \n",
       "9                 550  {'n_estimators': 550}          -8.918502   \n",
       "\n",
       "    split1_test_score  split2_test_score  split3_test_score  mean_test_score  \\\n",
       "13          -8.751699          -9.298411          -9.049730        -9.000181   \n",
       "14          -8.758299          -9.296941          -9.047485        -9.001594   \n",
       "12          -8.755862          -9.312990          -9.053755        -9.006666   \n",
       "11          -8.755401          -9.325190          -9.052215        -9.009699   \n",
       "9           -8.756938          -9.325492          -9.042721        -9.010861   \n",
       "\n",
       "    std_test_score  rank_test_score  split0_train_score  split1_train_score  \\\n",
       "13        0.201836                1           -6.716494           -6.660453   \n",
       "14        0.198793                2           -6.689643           -6.648109   \n",
       "12        0.205811                3           -6.743886           -6.695770   \n",
       "11        0.210186                4           -6.778068           -6.721452   \n",
       "9         0.207970                5           -6.874737           -6.781878   \n",
       "\n",
       "    split2_train_score  split3_train_score  mean_train_score  std_train_score  \n",
       "13           -6.520818           -6.579989         -6.619438         0.074807  \n",
       "14           -6.486269           -6.530287         -6.588577         0.083101  \n",
       "12           -6.611240           -6.624919         -6.668953         0.053861  \n",
       "11           -6.708191           -6.666758         -6.718617         0.039814  \n",
       "9            -6.809121           -6.745712         -6.802862         0.047201  "
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "results.sort_values('mean_test_score', ascending = False).head(5)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "从上面看出，我们的模型是过度拟合！训练误差显著低于测试误差，说明该模型对训练数据的学习效果很好，但不能推广到测试数据中。随着树木数量的增加，过度拟合的数量也会增加。测试误差和训练误差均随树数的增加而减小，但训练误差的减小速度较快。\n",
    "\n",
    "在训练误差和测试误差之间总是有差异的（训练误差总是较低的），但是如果有显著的差异，我们希望通过获得更多的训练数据或通过超参数调整或正则化来降低模型的复杂性来尝试减少过拟合。对于GBDT回归模型，一些选项包括减少树的数量、减少每棵树的最大深度以及增加叶节点中的最小样本数。如果想进一步研究GBDT可以了解[该文章](http://blog.kaggle.com/2017/01/23/a-kaggle-master-explains-gradient-boosting/)。目前，我们将使用性能最好的模型，并接受它可能会过拟合。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 在测试集上评估模型\n",
    "\n",
    "我们使用超参数调整的最佳模型在测试集上进行预测。此前，我们的模型从未见过测试集，因此性能应该是一个很好的指标，表明如果在生产中部署模型，它将如何执行。\n",
    "\n",
    "为了进行比较，我们比较默认模型、最优模型的性能。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "GradientBoostingRegressor(alpha=0.9, criterion='friedman_mse', init=None,\n",
       "                          learning_rate=0.1, loss='lad', max_depth=5,\n",
       "                          max_features=None, max_leaf_nodes=None,\n",
       "                          min_impurity_decrease=0.0, min_impurity_split=None,\n",
       "                          min_samples_leaf=6, min_samples_split=6,\n",
       "                          min_weight_fraction_leaf=0.0, n_estimators=750,\n",
       "                          n_iter_no_change=None, presort='auto',\n",
       "                          random_state=42, subsample=1.0, tol=0.0001,\n",
       "                          validation_fraction=0.1, verbose=0, warm_start=False)"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Default model\n",
    "default_model = GradientBoostingRegressor(random_state = 42)\n",
    "\n",
    "# Select the best model\n",
    "final_model = grid_search.best_estimator_\n",
    "\n",
    "final_model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "1.19 s ± 44.9 ms per loop (mean ± std. dev. of 5 runs, 1 loop each)\n"
     ]
    }
   ],
   "source": [
    "# 重复执行，-n在当前循环中执行多少次，-r循环多少次\n",
    "%%timeit -n 1 -r 5\n",
    "default_model.fit(X, y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "14.9 s ± 271 ms per loop (mean ± std. dev. of 5 runs, 1 loop each)\n"
     ]
    }
   ],
   "source": [
    "%%timeit -n 1 -r 5\n",
    "final_model.fit(X, y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Default model performance on the test set: MAE = 10.0130.\n",
      "Final model performance on the test set:   MAE = 9.0474.\n"
     ]
    }
   ],
   "source": [
    "default_pred = default_model.predict(X_test)\n",
    "final_pred = final_model.predict(X_test)\n",
    "\n",
    "print('Default model performance on the test set: MAE = %0.4f.' % mae(y_test, default_pred))\n",
    "print('Final model performance on the test set:   MAE = %0.4f.' % mae(y_test, final_pred))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "对比测试结果，训练时间近似，模型得到差不多10%的提升。证明我们的优化是有效的。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAlAAAAIgCAYAAABKwFeEAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjAsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+17YcXAAAgAElEQVR4nOzdd3zN1//A8dcd2YkMYoSI3QgVNRKjsarD3lUUtcq36ZefLrQ6dKLoV4dvzdpFzaKILSJFkWUlIWInMm52cufvj3zvjU+WhMi9OM/Hwx/3fD6f8zn5+HDfOed9zpGpVCoDgiAIgiAIQpnJzd0AQRAEQRCEJ40IoARBEARBEMpJBFCCIAiCIAjlJAIoQRAEQRCEchIBlCAIgiAIQjmJAEoQBEEQBKGcRAAlCI9oyZIl+Pn5lelPv379HmtbcnNzWbduXannZGdn07lzZzp06EB6enqp5965cwd/f3/efPPNcrclODgYPz8/fv7553Jf+yzYtGkTfn5+bNmypdTzsrOzi32X/P39CQgIYNCgQcydO5d79+5VUsvzXblyBT8/Pz755BNT2cKFC/Hz8yM0NLTc9RkMBnbt2kVCQoKpTLxDgiVTmrsBgvCka926dZGy3bt3c+fOHd544w0cHR1N5U5OTo+1LWPHjuXevXuMGDGixHPs7e3p2rUrf/31F4cOHaJ///4lnrt3714MBgO9e/d+HM0VysHV1ZVBgwZJynJzc4mIiGDz5s0EBwezatUq3NzczNRC8Pf3x87Ojjp16pT72u+//57NmzezadMmU1ndunUZP348LVu2rMhmCkKFEAGUIDyi1q1bFwmizp49awqgPDw8Kq0tKSkpZTqvV69e/PXXX+zfv/+BAZRSqeS1116rqCYKD8nV1ZW333672GOffvop+/btY+XKlbz33nuV3LIC7dq1o127dg91bXHvrpeXV4k/syCYmxjCE4RnUJs2bahVqxZnz54lOTm52HMuXbpEXFwcL774Ii4uLpXcQqE8Ro4cCUBISIiZWyIIzw7RAyUIZqLX69m6dSvbt28nPj4ea2trfH19mTBhAk2bNpWcGxkZyYoVK7h8+TLp6enUqFGDzp07M2bMGJycnLh27Rqvv/666Xw/Pz/atWvHjz/+WOy9ZTIZPXr0YMWKFRw8eFByrdGePXsAigzfJSUlsWbNGk6cOMHdu3cB8PDw4JVXXmH06NEolSX/tzJq1CguXbpEcHAwNjY2pvKEhAT69OlDx44d+eGHHyTPaPPmzezYsYPr169jY2NDy5YtmTBhAs8995yk7oiICJYvX050dDQZGRnUqFGDLl26MGbMGMkwaklu3rzJ6tWrOXXqFElJSSgUCry8vOjTpw9DhgwxnRccHMz777/P119/TVZWFhs3buTmzZu4uLjQvXt3Jk6ciJ2dnaTugwcPsnbtWq5cuUKVKlXo378/Dg4OD2xTWbm7uwOQlpZmKnv55Zdp2rQpXbp04ddff0WtVjNgwACmTJkCwPnz51m+fDkRERHk5eXh5eXFgAEDGDhwIDKZTFL/pUuXWLJkCeHh4QB06tSp2GHdhQsXsm7dOhYuXEj79u0l169cuZKwsDByc3Px9PRk8ODB9O3bF5lMxssvv2xq++uvv46dnR1Hjx41PetRo0bx7rvvmuq7e/cuy5cvJzQ0lJSUFNzc3OjYsSPjx483PQvIzzObN2+eqe07duwgMTERd3d3evfuXeR9fdR3SHi2iABKEMzks88+IygoiIYNGzJgwADy8vI4cOAA48eP5/vvv6dDhw4AxMbG8u9//xulUslLL72Ek5MTkZGRrF27lvDwcJYtW4aLiwvjx49n3bp16PV6Ro4ciaenZ6n37927NytWrGD//v1FAii9Xs/+/ftxc3MztQMgNTWVt956i5SUFDp16kSXLl1QqVQcPnyYxYsXk5KSwocfflghz8dgMDBz5kwOHDhAo0aNGDBgALm5uRw4cIBx48Yxf/58/P39AYiOjubf//431tbWdOvWDScnJyIiIlizZg2RkZEsWbKk1Htdu3aNsWPHotPp6NKlC9WrVycxMZHDhw/z/fffk5eXVySR3hgQdevWjQ4dOnDkyBHWr19Pamoqs2bNMp23YcMGFixYgJubGz179iQnJ4dVq1ZV6BfyjRs3AKhevbqk/PLly4SFhdGzZ0/y8vJo3rw5AEeOHOHjjz/GxsaGrl274uLiwt9//82cOXO4cOECn376qamOiIgI3n33XXQ6Hd26dcPR0ZHg4GD+/vvvMrUtNDTU9E507tyZ6tWrExISwjfffMPNmzcJDAxk5MiR7N69m7i4OIYMGUK1atVKrO/q1au8/fbbpKen065dO7p3705sbCzbtm3j2LFjLF68mLp160quWbBgATdu3DC1PygoiMWLF6PRaJg0aRLw6O+Q8OwRAZQgmMHevXsJCgqiR48efPrpp6bfgseMGcPo0aP58ssv2b59O7a2tmzdupXs7GyWLVtGixYtTHV88MEHHDt2jIsXL+Lj48Pbb7/N1q1b0el0ZcobqVOnDr6+vkRERHD37l1q1qxpOnb69GmSkpIYNmyY5Df0DRs2kJiYyKxZs+jRo4epfMKECQwaNIi9e/dWWAC1e/duDhw4QO/evfnkk09QKBQAvPXWW4wePZovvviCHTt2YG1tzZYtW8jJyWHRokU0a9bMVMfUqVMJCQkhOjqaJk2alHivFStWkJmZyZIlSyQJy8OGDWPUqFHs3bu3SAB15coVli1bZuotHDt2LIMHD+bAgQN88MEHODk5kZSUxC+//EKtWrVYtmyZqXdk6NChTJw4sUKek1arZfny5QB07dpVciw1NZWPP/5YkueWmZnJl19+iaurKytWrKBGjRoAvPvuu8ycOZOdO3fSuXNnOnXqBOQnd2s0Gn755RdatWoFwNtvv82kSZNKHP69v23ffPMNSqWSX3/9FW9vbwAmTZrE2LFjWbNmDUOHDmXUqFFcuHDBFEDVq1evxDq//vpr0tPT+eqrr3j11VdN5Zs3b2bu3Ll89dVXLF26VHLN7du3WbdunSkfcdiwYQwePJjt27ebAqhHfYeEZ4/IgRIEM9ixYwcymYz33ntPEqDUrFmTQYMGkZKSUiSfxTh8YjRz5kz27duHj4/PQ7ejV69eGAwG9u/fLykvafiuc+fOzJgxg1deeUVSXr16dTw9PcnIyECr1T50e+63Y8cO5HI57733nil4gvzhwoEDB5KcnMyJEyck14SFhUk+f/755wQFBT3wi69fv3589tlnRWZ7eXt74+DggEqlKnKNn5+fZKjV0dGRli1botFoTFPxjx07Rl5eHsOHD5cMLfn4+NCrV68HPAGp1NRUlixZIvnz/fffM3ToUEJDQ2nUqFGxy00UDqoOHjxIZmYmo0ePNgVPAHK5nH/9618A/PnnnwDEx8dz+fJlAgICTMET5Ce0jx8//oFtPnPmDImJifTt29cUPAHY2NgwZcoUJkyYgFqtLvMziIuLIyoqCn9/f0nwBDB48GCaN29OeHg48fHxkmOvvPKKZDJHzZo1adCgASkpKWRlZUnOfdh3SHj2iB4oQTCDixcvYmNjw8aNG4sci4uLA/KHFF566SX69OnDjh07+Omnn9i4cSP+/v507NiRdu3aYW9v/0jt6N69O/Pnz2f//v2mROTc3FyOHj2Kt7c3jRs3lpzv4+ODj48PmZmZREdHc/PmTeLj47l48aKp3Xq9/pHaZHTp0iVsbW1Zv359kWPGL8jo6Gi6dOlC37592bVrFwsXLuT333+nXbt2pmdUOB+pOMZZlCqViujoaG7dusW1a9c4f/482dnZ2NraFrmmuCFSY16TRqMxtQ8oNsht0aIFW7dufWDbjFJTU1m2bJnps0wmw97eHk9PT8aPH8/w4cOL/KwODg44OztLyi5evAjk50AVNyylUCiIiYmRtP/+Hpn72/8gpV1vXM+qPIztKmlZg5YtWxIVFUV0dDReXl6m8sJDeoBpCNX4d/Wo75Dw7BEBlCBUMp1OR3Z2NoDkC7GwjIwMAJo2bcqKFStYuXIlJ06cYOfOnezcuRNbW1sGDx5MYGCgpIemPBwdHenSpQv79u3j+vXr1K1bl6NHj5KVlVVsD0lubi4///wzO3bsIC8vD8jvfWrZsiVVq1YlMTERg8HwUG25n1qtNtVflmfUrFkzli1bxqpVqzhx4gR//vknf/75J3Z2dgwZMoR33nkHubzkDneVSsUPP/xAUFAQOp0OmUyGh4cHrVu3JiYmptifydraukiZMfnaeH5mZiZAsYFuedcEa9CgARs2bCjXNfcn6hsZ22TsZSyOcYHVR22/sZ6KSpg3tqek/DFj7lRubq6k3MrKqsi5hRPlH/UdEp49IoAShEqmUCiwsbGhatWqbN++vUzXPPfcc3z33XdoNBoiIiIIDQ1l165drF27lmrVqjF8+PCHbk+vXr3Yt28f+/fvZ9y4cezduxcrK6siQyQAc+bMYffu3XTv3p2BAwfSuHFjUw/HsGHDSExMLPVehQMMo8JfeNbW1iiVSmrVqvXAlbqNmjZtyuzZs1Gr1URERHDixAl2797N6tWrcXd3Z+jQoSVeO336dM6ePcvgwYN59dVXadSokelL/8CBA2W6f3GqVKkCUGSYCPJ7lMzB2JtSOKeuOMYgyRi43K8s7Tfey/gLw/20Wi0Gg6HY4KYkxkAuKSmp2OPGgK1wr1tZPco7JDx7RDgtCGbQuHFj7t69W+yX0IkTJ1i0aBGXLl0CYNu2bSxYsADI/026devWvPvuu8yfPx+Q5mwU/q26LPz8/KhevTqHDx8mMzOTkydPEhAQUGTtJ71eT1BQENWrV+fbb7+lTZs2pi+qvLw8bt++DRQNju5n/LLMycmRlF+/fr3IuY0bN+b27dvF5h8FBwezaNEiLl++DOQnEBufkbW1NW3atGHy5Ml8//33QNG8lvslJCRw9uxZfH19+eijj/D19TUFTwkJCcV++ZeVMe+ncP4aYGp7ZTPm8hiH8u6XlpbGggUL2LVrF4ApxysiIqLIucb3szSNGjUC8ocLCztw4AABAQHs2LGjzG03Ll1R0t/n2bNngfzeuvJ6lHdIeDaJAEoQzKB3797o9XrTDCejpKQkZs+ezcqVK03DLxEREWzYsIFjx45J6jAGLPfPnlMqlZL6ykIul9OjRw+io6PZsmULWq222OE7mUyGtbU1eXl5kh4VnU7HggULTEFRaUnkxryU48ePm8ry8vJYs2ZNkXN79+6NTqdj3rx5kjqTkpKYM2cOq1atMuUmGZ9R4cR74zOqVatWiW0y1pGeni65T25uLnPmzHngz1Sazp074+TkxPr167l586ap/MqVK6ZE7crWvXt3bG1t+e2337h165bk2E8//cSGDRtMyyLUrl2bli1bEhoaSnBwsOm8zMxM08y/0vj7++Pq6srOnTu5cuWKqTwvL4/169cjk8lMeVDGyRSlJZXXr1/flCi+c+dOybHt27cTFhZGixYtHmormUd5h4RnkxjCEwQz6N+/P8ePH+fAgQPExMTg7++PTqfj4MGDqFQqJkyYQP369YH8afvHjh1j2rRpdOnShTp16nDnzh0OHz6Mq6urZPiuZs2aJCQk8Pnnn/P8888zePDgMrWnd+/erFq1iuXLl+Pm5iZZBNHIuPjm5s2bGTVqFAEBAeh0Ov7++2/i4+NxdXUlNTWVtLS0EnNUBgwYwO7du5kzZw7nzp2jSpUqHDt2DHt7+yJ5MgMHDiQkJISgoCBiYmJo27YtWq2WgwcPkpaWxqRJk0wB2dixYwkODubDDz+kS5cu1K5dmzt37nDo0CHc3NxKHXpxdnamY8eOhISEMGbMGNq2bUtOTg7BwcEkJydTpUoVsrKy0Gq1pS4SWlLdH330EZ9//jmjR4+mW7du6PV6Dh06RPXq1U2BSmVydXVlxowZzJo1ixEjRtC5c2eqVq3K2bNnuXDhAt7e3qYJBZA/vDlx4kTTs61WrRrBwcFlehY2NjbMnDmTadOmMWbMGNOaU8ePH+fGjRtMnjzZFJgYfxFYsGABLVq0MM0ILGzmzJlMmjSJr776yrSOWmxsLKdOnaJatWqSNazK41HeIeHZJHqgBMEM5HI5c+fOZerUqdjY2LBjxw7279+Pl5cX3333HRMmTDCd6+XlxdKlS3nppZe4cOEC69ev59y5c7z66qusXLlS0gM1ZcoUGjZsyP79+9m2bVuZ2+Pl5UXz5s3Jzc2lR48eJX45TpkyhXHjxmEwGNiyZQtHjhyhVq1a/Pjjj6Zp7aUtsNi8eXPmzZtH48aNCQoKYu/evfj5+bFo0aIi91QoFMybN48pU6agVCrZsWMHBw4coH79+syZM4exY8eazq1Xrx7Lli2ja9euREVFmZ5Rjx49WLlypWS6fnG+/PJLhgwZQlpaGn/88QehoaH4+PiwbNky+vbti06n4/Tp02V9nBKvvvoqCxcupFGjRuzfv5+QkBAGDBhAYGDgQ9VXEXr06MF///tfXnjhBUJCQvjjjz/Izs5m7NixLFq0SBIAN2jQgOXLl9OtWzfOnDnDrl278Pb2Ng13PUhAQACLFy+mdevWBAcHs3nzZuzs7Pjss88kyy4MGzYMPz8/zp8/z5YtW0rMp2vQoAGrV6+mb9++XLlyhT/++IMbN24wdOhQ1qxZI5l9Vx6P+g4Jzx6ZSqV69CkzgiAIgiAIzxDRAyUIgiAIglBOIoASBEEQBEEoJxFACYIgCIIglJMIoARBEARBEMpJBFCCIAiCIAjlJAIoQRAEQRCEchIBlCAIgiAIQjmJAMoMYmJizN2EJ454ZuUnntnDEc+t/MQzKz/xzMrP0p6ZCKAEQRAEQRDKSQRQgiAIgiAI5SQCKEEQBEEQhHISAZQgCIIgCEI5iQBKEARBEAShnEQAJQiCIAiCUE4igBIEQRAEQSgnEUAJgiAIgiCUk9LcDRDAYDCQnZ2NVqs1d1Mslq2tLWlpaeZuxhPFkp6ZUqnE3t4emUxm7qYIgiBUCBFAmZnBYEClUuHg4CC+YEphY2ODra2tuZvxRLGUZ2YwGNBoNKhUKlxcXMQ7LgjCU0EEUGaWnZ2Ng4MD1tbW5m6KIDwWMpnM9H4b33dBEIQnnciBMjOtVouVlZW5myEIj52VlZUYphYE4akhAigLIIY0hGeBeM8FQXiaiABKEARBEAShnEQAJQiCIAiCUE4igBIEQRAEQSgnEUAJggUzGAzmboLwlErO1ZGnE++XIDwssYyBYNHOnDnDv/71r2KPKZVKHB0dadiwIa+88gp9+/ZFoVBUavsSEhLo06cPtWrVYseOHaZyPz8/FAoFoaGhD1VvUlISP/74I/3796dVq1am8n79+nHnzh127txJjRo1Hrn9wrMnNk3D/51QcfyuGoUMGlVR4u2qpGVVa0Y2saeabeX+GxKEJ5UIoIQngp2dHZ07d5aUabVaUlNTCQsL48yZM5w8eZLZs2ebqYUVa9asWZw8eZJ+/fqZuynCU0KnN7DofCbfnEsnV/e/MgNcTtNyOU3Ljmu5/ByVyaaXq9LaXaxLJwgPIgIo4Yng7OzMl19+Weyx6OhoJk6cyKFDhzh8+DBdu3at5NYVtWnTpkeatq/X64st/+WXX9BqtVStWvWh6xaePTcztYw5ksLpe5pSz0vO09NnbxK/dXHjVU/zr2IvCJZM5EAJT7wmTZrQv39/AI4cOWLexvxPvXr18PLyqvB669SpQ7169VAqxe8+Qtnk6Qy8vj/5gcGTUbbWwPCDyayOznrMLROEJ5v4X1h4KtSuXRuAlJQUID9XKDs7m19++YVZs2Zx7do13N3d+f7772ncuDEAoaGhrF+/ngsXLqBWq/H09KRnz54MHTq02NXh9+7dy8aNG4mLi8POzo5XXnmFAQMGFNueknKgEhMTWbt2LcePH+fevXtUrVqVVq1aMX78eDw8PLh9+7YpGARM+V/bt2/Hw8OjxBwolUrF6tWrOXr0KHfv3sXOzg5vb29GjBhB+/btJW2YNWsWu3fv5vfff+f8+fNs2rSJ+Ph47O3tadeuHRMnTsTDw0NyTUREBKtXr+by5cukpKTg6upK69atGT16NA0aNCjT35FgHvMjMrigkq4A72ItY7a/Cz3r2nJZpWXbtWwWnS8ImHQGmByiQm+At54TW+8IQnFEACU8Fa5evQpAzZo1TWVqtZqpU6dia2tL+/btiYuLo379+gAsX76cxYsXY2VlhY+PD66uroSHh/Pjjz8SEhLCwoULJfsT/vLLL6xatQobGxvatGmDTqdj8+bN/P3332VuY3R0NJMnTyYlJQVPT086duzI9evX2bVrF8eOHeO3337DycmJ1157jdOnT5OcnIyfnx9ubm7Y29uXWO/NmzeZNGkSiYmJVK9enYCAAFQqFWfOnOHUqVNMmDCBCRMmFLnu119/5ejRo3h7e9O+fXsiIiLYs2cPZ86cYcuWLdjY2AAQGRlJYGAgGo0GX19fmjVrxrVr19izZw9Hjx5l+fLlNGzYsMzPQag8kSkaFoRnSMq6eNjwa4ArNe3zk8XbVrembXVrGlZR8uHfaejvm5g3/aSKDjWsaeIitpsShMJEAGXhXH67Ze4mlItqTO1Kv+fZs2dNM+BeeeUVU3lOTg4NGzZkyZIlKJVK9Ho9crmcU6dOsXjxYmrWrMkPP/xg+vLPycnh008/5dixYyxbtox33nkHgAsXLrB69Wrc3NxYvHixaWjuypUrpnMeRK/XM2vWLFJSUpgwYQLjx4835UgtXbqUpUuXMm/ePBYuXMiXX35JYGAgycnJjBkzhtatW5dYr8Fg4OOPPyYxMZEhQ4YwdepU0/DeuXPn+Oijj1i6dCnNmzcv0hMVEhLC/PnzCQgIACAzM5Nx48YRFxfHwYMH6dmzJwD//e9/ycvL4+eff8bPz890/U8//cSaNWtYu3Ytn3/+eZmeg1B5tHoD7x5PRXtfQFTDTs7KLm642BTN3hjn7UgNOwXjj6aYksxzdTAxOJWgXu5YycVWPIJwP5EDJTwR0tLS+OyzzyR/pk+fzogRI5g0aRIajYYhQ4bQtm1byXUDBw40BRRyef7rvnbtWgA++OADSc+JnZ0dn3zyCTY2Nvzxxx+o1WoAtm7disFgYOLEiZK8poYNG/L222+Xqf2RkZHExMTQtGlTJkyYIEkwHzt2LI0bN0ar1aLRlC1PxejcuXNcunSJ+vXr895770lyo5o2bcqUKVMAWLNmTZFru3fvbgqeABwdHU1B0/nz503lycnJAEWWTRg1ahTvv/8+ffr0KVebhcrxU1Qm4cnS92lee5digyej3l52/KeDq6TsXJKG+YV6sQRBED1QwhMiJyeHvXv3Ssqsra1xcXEhICCA3r17Fzv7rkmTJpLPOp2Oc+fOARTbs+Pq6oq3tzfh4eFcvnyZ559/3nR+hw4dipzfuXNn5syZ88D2nzlzBoAXX3yxyDGFQsG6deseWEdxjG3r2rVrsWtgde/enW+++YaIiAh0Op3knGbNmhU53zi7Lzc311TWsmVL4uLi+Ne//kWvXr3o2LEjzZs3x9nZmaFDhz5Uu4XH60qaltlh6ZKyAfXs6ONl98Brhza0Y/f1HHbGF7wD34dn8EodW1qJ5Q0EwUQEUMIToWbNmvz555/lvq5KlSqSz2lpaeTl5QE8cLmDhIQEnn/+ee7duweAu7t7kXOqVatWbMJ5YSX14jwqY9tq1apV7HFbW1tcXV1JSkoiIyMDFxcX0zEnJ6ci5xsDrPuXUfj3v//NjRs3+Oeff1i1ahWrVq3C0dGRDh060LdvX8mwnmAZ/hOZQZ6u4LObjZy57ZzLdK1MJuM/HVw4mZhIYk7+e6Az5A/lHetbHTulGMoTBBABlMUzR07R06TwWkzGwMDW1pYuXbqUeq2xN8ZYR0nbqpRl9XOtVvvAcx6GsU2lrTll/JkLB3plXafK0dGRRYsWERUVxZEjRzh16hTR0dEEBQURFBTEm2++yeTJkx/yJxAqWkqujj+uZkvKvvFzxt2u7CuMV7VV8FNHV4YeSDaVxaRpWXQ+k/d9iwbegvAsEgGU8ExxdnZGqVSi0+n4/PPPyxT8uLu7c/36de7evWtaLsEoMzNTMtxVEmMwlpiYWOzx48ePk5OTg5+fH87OZespMLYN4Nat4icbZGVloVKpsLGxwcHh0aajN2/enObNmwP5yybs3r2bn3/+mfXr1/PGG29QvXr1R6pfqBhrY7JNSeAAdRwUDGnw4KG7wl71tGV0E3tWRRcEY/+JzGBUE/tyBWOC8LQSSeTCM8XKyormzZuj0Wg4ffp0keNqtZpRo0YxYcIEbt++DWAaojp69GiR80+cOFGm+/r6+gIUuzeewWBg/vz5fPrpp6aeqrL2Dr3wwgtA/gKiOp2uyPFDhw6h1+tLnclXmszMTEaPHs3w4cMl5S4uLowYMYImTZqg1+tNQ4mCeen0BpZdki6AOd7bAeVDzqCb1cYZF+uCazM0BuaGiYRyQQARQAnPoGHDhgEwe/Zsrly5YirXarXMmzePS5cukZOTY1pMctCgQSiVSpYvX86FCxdM59+6dYuffvqpTPds27YtXl5eREZGFkkYX7FiBbdu3aJt27amnirjGlSZmZml1tuqVSuee+454uLiWLBggWSo8PLly/z4448ADB48uEztLMzR0RGDwUBsbCwbN26UHIuJieHq1avY29tTr169h6pfqFj7buZyPbMgkLZRwMgmJa8h9iAuNnI+bCnNI/ztchaxaeWbLSoITyOzDeGdOnWK3377jdjYWLRaLd7e3owaNarIWjWliY+PZ+nSpYSFhZGWloanpyf9+/dn8ODBpinrJVGpVLz++ut06tSJmTNnlul+QUFBzJw5k169eol1b55gXbt25Y033mDDhg2MHDmSpk2bUrVqVS5evEhCQgKurq588803pvMbNmzIlClTWLBgAePGjaNNmzZYWVlx+vRpGjZsWKbeF7lcztdff01gYCALFy5k586d1KtXj7i4OOLi4nBzc+PTTz81ne/p6QnA3Llz2bNnD4GBgaay+8lkMlO9f/zxB8eOHaNZs2akpaURFhaGTqdj3Lhxxc7+K6tp06YxaeEK9dcAACAASURBVNIk5s+fz7Zt26hXr56k/o8++uiRhweFirHkorT3aXADe6raPtpw23hvB5ZcyCT+f4GZ1gBf/JPO2pfEfozCs80sPVC7du3i3XffJTIykmbNmtG8eXPCw8OZMmUK27ZtK1Md0dHRvPXWWwQFBVGrVi3at29PQkIC8+bN44svvij12tzcXKZNm4ZKpSpzm+/du8fcuXPLfL5g2d577z3mzp1Lq1atuHbtGqGhodja2vL666+zZs2aIvvYDR06lP/85z/4+voSFRVFZGQkL7/8MgsXLizzcNtzzz3H6tWr6devH5mZmRw7doz09HT69OnDqlWrJDlEb731Fh07diQjI4OTJ09y/fr1Euv18vJi9erVDB8+HCsrK4KDg4mLi8Pf35+ff/6ZiRMnPtxD+p9mzZqxePFiunbtikql4ujRo8TGxprqf9jeLaFiXVZpOHI7T1I2wfvRA1sbhYzPW0t7oXZdzyU0Ia+EKwTh2SBTqVTFTy16TJKSkujfvz/W1tYsXbrUtJDhhQsXCAwMRKvVsmXLllITUg0GAyNGjCA2NpZZs2bRo0cPAFJTUwkMDCQ2NpbZs2fTrVu3ItcmJCQwY8YMoqKiAOjbt2+ZeqCmTJliyl951B6omJgY035saWlp5Uoaflbl5uZiayt2hy8PS3xmT8L7fv+/zyfJh6Eqlt6X/+Rf3Zp9vYouvfEwDAYD3Xfd40xSwdBdW3crgnq5I5PJnthnZk7imZWfpT2zSu+B2rRpE2q1mmHDhklWgfbx8WHkyJHk5eWxffv2Uus4efIksbGxtG7d2hQ8Qf4iiNOmTQMokq+h1WrZtGkTI0aMICoqqshsqtJs3ryZ0NBQU8KuIAiCJcnS6Pk9Vrp0wdtNK25YVSaT8VVbaeB7+p6G/TdFL5Tw7Kr0AMrYi9O5c+cix4zr8jxoZlNpdfj6+uLm5kZ4eDhZWQW/jYWHhzNv3jx0Oh3Tp09n3LhxZWrvzZs3+emnn/D396d///5lukYQBKEyHbiVR+Z9m97VsJOXadXx8uhQ04bXPKU9mt+eSy9xfTRBeNpVagBlMBiIi4tDLpdTv379Isfr1q2LXC7n6tWrpf6jvHr1KgANGjQo9njdunXR6/XExcWZyuzs7Bg2bBhbt25l4MCBZWqvTqfjiy++QKFQlDnRXBAEobL9eS1H8nlQAzusFRW/YviMF6SLaIYla/jr+oPXQROEp1GlBlDp6emo1WqcnZ2L3f5CqVTi4uJCbm6upPeoMOO2GNWqVSv2uLE8JSXFVObj48PUqVNxdXUt9prirFmzhoiICN5///0K34JDEAShIuRqDey7IQ1i+lZw75ORb1Vr+nhJe6G+C8tALzqhhGdQpS5jYFyxubTEVhsbGyB/81hHR8diz8nJySm1HmMd2dnZxR4vi5iYGJYuXUqnTp3o1avXQ9fxoGO2tram9gqlK8uK34KUpT2z9PT0EldjtySl/du1NEeTFWRqC/4PqWatxzXtOjHppVz0CIa7ydgVb4uB/B6uqBQNR5IVyJ+gZ2YpnqT3zFJU9jMrLWm9UgOoskz3Ng7dlTaEZ1zjqaT6HnVMXqPR8Pnnn+Pg4MCMGTMeup6SHnzhWXiWNlPKElnijDJLZ4nPrEqVKsWuZ2VJLG2mz4PMv5MCFAzh9W/gxHNNHt8zbgwMUKWwNa7gnouvWzHevz6Kh1zx/Fn0pL1nlsDSnlmlBlD29vkr4ubllTxzQ61WA/k5SyUxHiupHmMdD/vl8euvvxIbG8u3335rWhlaEATB0qh1BvYUHr6r93iG7+43vaUT26/lmIburmbL2X4th0ENHn7VcwmDAdmd68hvX0eWlwMaNTKNGoO9IwY3d/Ru1TFUrQ7KoqkgglBZKjWAcnBwwN7enrS0NLRaLUql9PZarda08amTU8k7fru7uxMdHU1ycnKxW0gkJSUBJedIlSY5OZl169ZhZ2fHsWPHOHbsmOmYcW+0sLAwPvvsM+rVq8fYsWPLfQ9BEISKcOxOHmnqgh73qjZyOtSwfuz3beJixeAGdmy6UtALNTssg/717B6+FyorA6sT+1FcOIMiJgpZRlqppxsUCvR1GqCv742u/nPoGjfHUKsuPGAXCkGoKJU+hFe/fn3Onz/P9evXi8yii4+PR6/XS9aHKk6DBg0ICQkhLi6uyCapBoOB+Ph4FApFsTP9HiQvLw+9Xk9OTg579+4t9pxbt25x69YtWrVqJQIoQRDM5s946ey7Xl62D71xcHlN863Clqs56P4Xv8Wkafnjag5vNCpfL5QsLQWrfZuxOrQDWU7Jk4eKXKfToYiPQREfg9WRnQAYHKqga/K86Y++XhPRSyU8NpW+F1779u05f/48R48eLRJAGXe779ChwwPrWLNmDUePHi2yjURERASpqam0atXqofbn8vDw4NSpU8Ue27NnD59//rnYC08QBLPT6g3sjpcO3/WrhOE7o4bOSt5oZM+6mILJOnPC0hncwK5sQZxWi/Wfq7H6awMyjbpC2iTLSkd5LgTluRAADNY26Bt4o6vvbeqpMrjXgjJuvyQIpan0AKp3796sWbOG1atX065dO5o2bQrkb+WyZs0abGxsJEHRzZs30Wq1VKtWzTQrr1WrVjRo0ICTJ0+yfft20wKXqampzJkzB4ARI0ZU8k8mCIJQeULuqknO05s+O1vLCKhZuTN6P/R1YmNsNsY1POMydGy4ks2bjUv/5VWWdBfb/36FIvZ8iecYbO3RNWyKwckFrG1AaYUsQ4UsJRFZciJyVfID2ydT56G4FI7iUnhBvQ5V0NV/Dv3/hv10z7UA2wrK3RKeKZUeQHl4eDBlyhTmzp3LuHHjaNu2LQaDgX/++ce0cKWbm5vp/MDAQO7cucNnn31G7969gfxZeJ9++imBgYF8++23/Pnnn1SrVo2zZ8+Snp5O//79CQgIqOwfTRAEodLsKjR818PT9rEsnlmaek5K3mxsz8rogl6ouWEZDG1oj1UJvVCKf45hu3wusuzMIscMTs6ouw9E90IH9J4NQK4o+ebpKhTXLiOPu4wi9nx+3lQZhgBlWekoo05D1On8eyoU6Bs2Q9u8DdqAHhjcKmb/QOHpV+kBFMDgwYOpUaMGa9asISwsDCsrK3x9fRkzZgx+fn5lqqNZs2asWLGCJUuW8M8//3DlyhU8PT1555136Nev32P+CQRBEMxr/63Kn31XnPd9nVgbk4XWkB8wXc/UsS4mm7eeK9oLZbV/KzZrfyxSrnd2Q9N7BJrOvcCmjLOnq7iga+GProU/GgC9DvnNOBSXI5DHRKK4HIlclfTAamQ6HYroCBTREVjvWI223UtoXnsdfd3Sc3EFQaZSqcQaspWs8DpQlr47vSWwxDWNLJ0lPrMn4X23tLVminM1XUurLQmmz9ZyiBteCwcr88xAG7/3GpvvFCRr13FQ8M/AGtgqC3qhSgqetL7tyB0/Haq4VGyjDAZkSXdRXL2Y30sVdwn5tWhkuTkPvhbQ+Hclb8wHYFdxmzLf70l4zyyNpT0zMd9TsEiTJ0/Gz8+Pn3/+uUznv/nmm/j5+UmWnSir3r174+fnZ1r+QhAs3cFCvU/ta9iYLXgCGFNHi819o203s3T8eqFgiK644MmgUJI3LJDcqd9VfPAEIJNhcK+F1r8b6jf+Rc6MhWT9dzdZ360id8IMNF37oq9Rp8TLrU4exv7Ld5DdvVnxbROeCiKAEixSnz59AAgKCnrgyvJXrlwhOjqaqlWrPnAGpyA8DQ7eki4i/FJt824HVd3GwDhvaU/NgogMknJ1KI/sKho8WVmTO/U7NK8NqdwZcXI5Bg8vtC++St5b75E9dy1Z8zeQ9+bkYoMp+e147GdNRBFxsvLaKDwxRAAlWKQuXbrg7OzM3bt3CQsLK/Xc3bt3A9CzZ88ii7MKwtNGrTNw/I40gOpa2/xDtR/6VsHFuiAYStcY+OOvk9is/kFynsHKitwp36B7vm1lN7FYhmo10bw8kOzZq8iZ/BU6T2nukyw7C9sF01H8U/7ebeHpJgIowSJZWVnx6quvArBv374Sz9Pr9QQFBQHQt2/fSmmbIJjTyUQ1mdqCXtkadnKau5r/FwdXGzkftqxi+lwrL5U398xFptOZyvKDp28tJniSkCvQtQ4g57NFaNp3lxySGQzYLp+D7N4dMzVOsEQigBIsljEgOnToEFqttthzTp8+TWJiIr6+vnh5eZnKIyMjmTlzJn369KFjx4506dKFESNG8Ntvv5n2SiyJVqvFz8+PF198sdjjkyZNws/Pr0jPmFarZePGjYwaNYpOnTrRtWtXJk2aZFogtrDg4GACAwPp0aMHL774IgMGDGDu3LkkJCQUe74gABy+Lc1/6uphU6aN2ivDBG8H6jspsNZr2HR+IbXUKsnx3EmfWmbwdD9rG/ImfkLe0EkYZAVfkbLsLGx//Rp0xf9fJDx7RAAlWKwmTZrQpEkTVCoVp0+fLvacv/76C5D2Pu3Zs4cJEyZw8OBBPDw8CAgIoEGDBsTGxvLf//73sawir9FomDp1KvPnz+f27du0atWK559/nvPnz/Phhx+yZMkSyfkHDx7kgw8+IDw8nEaNGtGxY0cMBgObN29mzJgxpKSkVHgbhadD0fwn8w/fGVkrZHzRxpkFsWtonx4jOabu8ya6Np3M1LJyksnQ9HwD9Rv/khQrYs9jvX2VmRolWBrz9/sKpXIc3cXcTSiXzFVHKrS+Pn36MH/+fPbv30/Xrl0lx3Jycjhy5Aj29va89NJLQP7U/Xnz5mFlZcXixYvx8fExnR8eHs6kSZM4dOgQSUlJD7XZdEmWLFnCyZMnad++PV999RVVquQPZdy6dYvAwECWLVtGy5YtTeucLVy4EIVCwbp160w9ZzqdjpkzZ3Lw4EG2bdvGuHHjKqx9wtPhXo6O8GSN6bMM6GrmBPLCBqScwf72QUnZseotadr3LcyzUtXD07w6GMWFMyjD/zaVWe1ci86nFbqmL5ixZYIlED1QgkV77bXXsLa2JiQkhNxc6dDF4cOHycnJoXv37tjb52/FkJycTMeOHRk5cqQkeALw9fWlYcOGGAwGEhMTK6yNubm5bN68GVtbW7744gtT8ARQu3Ztpk6dCsDvv/9uKk9KSsLKyoqqVauayhQKBe+88w4fffQRHTt2rLD2CU+Pw7elvU++Va2oZlvKat2VLTMd25ULJEVXbKszsPE7zA4v+0bBFkMmI3f8dPQuBf9OZQYDNsvnQglpBcKzQwRQgkVzdnYmICCAnJycIrlExQ3f1a5dmy+//JK3337bVKbT6bh+/Tp79+4lPT0dyB9yqygXL14kKyuLhg0b4urqWuS4n58fcrmcsLAw05IML7zwAjk5OYwePZrly5dz6dIlDAYDnp6eDB48GG9v7wprn/D0KLz+UzcL632yWfcT8rSC4Wctct5oNhmVlQM/nc/k7L2K2TS4UlVxIe/tjzHcl2cmv3cH5ekj5muTYBHEEJ5g8fr27cvBgwfZt2+faWbevXv3+Oeff6hXrx4tWrSQnG8wGAgODmb37t3ExsZy584dUxK6Mdn2QWtLlYcx6fv8+fOlbkWUlZVFRkYGVapU4ZNPPuGDDz4gNjaWxYsXs3jxYtzc3AgICGDgwIGmTbYFwchgMBTpgepmQflPirMhWJ3YLyn7pVF/zjnVB0BvgHePp3Kkb/VK37PvUematUbbuTdWR3aayqz++h1tu5cqdx0rwaKIAMrCVXRO0ZPI398fd3d3/v77b9NWIHv27EGv15sW3DTS6XS89957hIaGYm1tTdOmTWnTpg2NGjWiZcuWzJs3j3Pnzj1Se3T3TcuG/KUUAOrUqUPz5s3LVIeHhwdr167ln3/+4dixY5w+fZq4uDh27NjBn3/+yUcffcSgQYMeqZ3C0yUqVUtijt702VEpw8/d2owtKqDIycJm5XxJmc6zIV4jx8DhdFPZBZWW+REZzHihSuEqLJ6651CUR3ch+98vX4rrV1BEnUb3fNn2bxWePiKAEiyeXC7ntddeY82aNRw6dIgBAwawd+9eFAoFPXv2lJy7a9cuQkNDadasGfPnz8fNzU1yPCMjo0z3g6KBklFmpnQXeWMyep06dfjyyy/L9XP5+fmZeq0SEhLYuHEja9eu5eeff6Z///4oFBaU3yKYVXChxTNfrGVjMT05Hoe3SobuDAoFeROm093LiTcaathwpWD/ufnhGXTxsKF9DcsafnwQQ4066Np0Qnm6IJXA6q8NIoB6hokcKOGJ0LNnT2QyGYcOHSI+Pp7Y2Fg6duwoScKG/GE0gP79+xcJnhITE4mLiwMKeo2KI5fLsbGxQafToVJJ17HJyMjg2rVrkjIfHx+sra05f/58kfMBoqOjGTRoENOnT8dgMHDt2jWGDx/OBx98IDmvRo0aTJ48GScnJ7KysooEasKzrXAA1bmWZQQg8vgYqp4NlpRper+J3it/09fv/F2oblfwVaM1wKhDKdzIfPKSsNU9h0k+Ky+cRR53yUytEcxNBFDCE6F27dq0bNmSM2fOsGPHDgD69etX5LwaNWoAEBISIgmSEhMTmT59uqlX6UGLaTZq1AiAjRs3msrUajWzZ88u0jPl6OhInz59yMjIYNasWaSlpZmOqVQqvvrqK27cuIGHhwcymYw6deqQlJRESEgIwcHSL57Q0FAyMjKoU6cOzs7OD3wuwrNBpzdwIqFoD5TZGQzYrFmIjIKcQn1NT9R93zR9drWR80N76WbB93L1jDiYQra25F9kLJG+gTfaQssXWP21sYSzhaedGMITnhh9+vTh3LlzbNiwgapVq9K+ffsi5/Tu3Zv169dz5MgRBg8eTJMmTUhLSyM8PByDwUDdunW5fv06ycnJpd5r+PDhfPLJJyxfvpzQ0FCqV69OZGQkarWajh07EhISIjl/8uTJXL58mZCQEAYOHIiPjw9KpZJz586RnZ2Nr6+vaWagUqlk+vTpzJgxg/fffx8fHx9q1qzJvXv3iIqKQqFQFOmdEp5tUaka0tQFQYqLtYxmFrB9i/LvgyhioiRlecPfBaWVpKyXlx0f+DoxL7xgCD0iRcO7x1Us7+xqMSupl4Wm5xsoLxbkUSpPH0WdeBtDdQ8ztkowB9EDJTwxunfvjoODA1qttsSNg2vUqMGSJUvo3Lkzubm5hISEkJiYSKdOnVi2bBmTJk0CKNLzU9jLL7/M3Llzef7557ly5Qpnz57F19eXVatWUa9evSLn29nZ8euvvzJlyhQ8PDwIDw8nPDwcT09P/u///o+ffvoJW9uCGVPdunXjP//5D/7+/ty8eZOjR49y69YtunXrxsqVK+nQocOjPSzhqXL8rrTHtGNNG+TmDjpys7He+KukSNuyPTpf/2JP//gFJ3rWlc4a3BqXw9dn0yt0VuzjpnveD12dBqbPMoMe5cnDZmyRYC4ylUr15Ly5T4mYmBgaN87PDzDOKhNKl5ubKwlAhAezxGf2JLzv9//7tBTDDiSz50bBGlCz/Z2Z5ONoxhaB9eZlWO9ca/psUFqR/e1vGGrUKfGaDI2eV3bd46JKmv/0dlMHZvs7mz8oLCPlwR3Yrv7B9FlX35ucL34t5YqiLPE9s3SW9sxED5QgCIIF0+kNhBTOf6pp3vwnWco9rPZukpRpXh1SavAE4GQlZ/1LVXG1kQZKSy5mMSk4FY3+yfh9XtdKulOAIu4SspSK291AeDKIAEoQBMGCRaZoSL8v/8nVRoaPmfOfrHesRqYpGFbUODqj7vNmKVcUqF9FyR8vV8PFWhpEbbqSw5sHk0nNs/zEcoNrNXQNpVtFKc+GlHC28LQSAZQgCIIFO35X2vvUsYZ5859kd2+gPLZbUnYnoA/Y2Ze5jjbu1uzu4U4NO+lX0L6bebTflsD+m7klXGk5tK0DJJ8VZ0rPqxSePiKAEgRBsGCFE8gDzLx8gfWWFcjuWyJEX6M2yS3Lv/l1Mzcr9vVyp56TdLHYuzl6huxPZkpIKmlqy+2N0rZ+UfJZcSkMMtNLOFt4GokAShAEwUIVu/6TGfOf5HGXsTolnXGmHjQOFA83pFjPScnenu74VrUqcmxVdDYtN9/lPxEZZGksL5Ay1PRE51HP9Fmm16MMCzVfg4RKJwIoQRAEC1U4/8nNRk5TM+Y/WW9eJvms82qMtm2XR6qzpr2C/b3c+aCFE/JCI5OpeQa+OJNOy80J/HI+kwwLC6R0hXqhlGIY75kiAihBEAQLFVw4/6mmtdnyn+SXI1BGnZaUqYdMAPmjf41YK2TMbF2FoF7uNHYuGiDey9Xzyak0mm28y8enVFzLsIxtYIrkQUWdhjzLz98SKoYIoARBECxU4fwncw7fWW9fKfms9W6JrnnbCr1HG3drjvZ1Z8YLTlSxKhoopmsMLDqfRastCYw8lMyJu3lmXYRTX68J+qo1TJ9l6rz8IEp4JogAygI8SavwCsLDEu95+Wj1BkIL9UCZK4FcHh2J8sJZSZl64Fh4DL1h9ko501pWIXxITd5v4YiDsug99AbYGZ9Lzz1JdNl5j41XstGaYw0pmQxtq0LDeOdOVH47BLMQAZSZKZVKNBqNuZshCI+dRqMpdvsdoXiRKRrSNQVBQVUbOd4u5nl+1ttXST5rm76A/rkWj/WerjZyPm3tTNjgGkxr6YS7bfFfV+HJGiYeS6XdtkS2XM1GX8mBuu4F6bZLiuiISr2/YD4igDIze3t7srKyUKvV4jd04alkMBhQq9VkZWVhb1/2tYKedcfvWEb+kzz2PMrz/0jK1P1HV9r93e0UzHihCpFDavLLiy4lbqIcm65l3NFUXtyRSNCNystD0jVqhkFRsBSDPOEWsrSUSru/YD7i10Ezk8lkuLi4kJ2dTU5OjrmbY7HS09OpUqWKuZvxRLGkZ6ZUKnFxcUH2hOx1ZgkKL6Bprvynwr1POm9f9N4tK70dtkoZIxo7MLyRPcfvqll0PpO9N3Ip/GvnhVQtrx9IZmB9O+b4O+Nupyi2vgpjY4u+bmMUcZdMRfKY8+jaBJRykfA0EAGUBZDJZDg4OJi7GRYtMTERT09PczfjiSKe2ZNLqzdwIsH8C2jKr1xEGXlKUqbuV3m9T8WRyWQE1LIhoJYNV9O1/BCRwfrYbHSFIqmtcTkcvp3Ld34uDG1o91iDd13j5pIAShETKQKoZ4AYwhMEQbAwEckaMiwg/8l61zrJZ12T59E1faHS21GSBlWU/PSiK6cG1GBIAzsKh0ipeQYmBacy5kjqY12MU9ekueSzIibqsd1LsBwigBIEQbAwRYbvallX+vCn7HY8inPSDXLV/UY/lpl3j6qhs5Klnd043MedFm5FVzXffi2HV/9K4nrm41k/St/4ecln+bVoUOeVcLbwtBABlCAIgoWxhPwn6z0bkd03sUXn1QRds9aV3o7yaFnNmkN93PmidRVsC6U+RaVo6PrnPULuVnxgY3Cpit69lumzTKdFHne5wu8jWBYRQAmCIFgQrd5AaIJ5F9CUpSahPLFfUqbp9YZF9j4VppTL+L8WThzvVx2fQjP2kvP09NubxI5rFT9hR9e48DBeZIXfQ7AsIoASBEGwIOGF8p+q2VZ+/pNV0BZk2oL16fTuHmjbdKrUNjyqRs5WBPVyp3ddW0m51gDjjqSwO75ig6iiAZTIg3raiQBKEATBghQ3fFep+U/ZmVgd/lNSpO4xFBRP3qRtRys5q7u5Mb2lk6Rca4C3jqSw90bFBVGF86AUMedBb1mbHwsVSwRQgiAIFqTwApov1rSu1PtbHd6JLCfL9Fnv5II24LVKbUNFkstkTH+hCotedJHM0tPoYdShFA7crJhFN/W162GwL1iORpaVjuzujQqpW7BMIoASBEGwEMXmP1Xm+k8aNVZBm6VFLw8Ea/NtYlxRhjd2YGFHF0mZWg+jDqdwPqUCttOSy9E1bCYpUkSLPKinmQigBEEQLERYsoZMbUH+k7utnOecK2/oTHliP3JVsumzwcYWzUv9K+3+j9uoJg780F4aRGVrDYw8lIwq79GH20Qe1LNFBFCCIAgWoujwXSXmP+n1WO/ZICnSdO4NjpaxHVBFGePtwGx/Z0nZ1Qwdk4JTH3kjYn2TwnlQogfqaSYCKEEQBAtR3AKalUVxLgT5nYKcHYNCgea1IZV2/8o0yceRUU2kG1vvvZHL/PCMR6pX18Abg7zga1WecAuyHq1OwXKJAEoQBMECaPQG/jbX+k8GA9a7f5cUaf1fwlC1RuXc3wzm+rvwQjXpquXfnsvg0K1HSCq3sUPv4SUpkt+Me/j6BIsmAihBEAQLEJYkzX+qbienSSXlP8mjI1FcuSAp0/R8o1LubS62Shmru7pR1abga9AATA5RkfkI++bp6zSQfJbfvPrQdQmWzWwLe5w6dYrffvuN2NhYtFot3t7ejBo1ivbt25e5jvj4eJYuXUpYWBhpaWl4enrSv39/Bg8ejFxeemyoUql4/fXX6dSpEzNnziz2nISEBH777TdCQ0O5d+8ednZ2NG3alBEjRpSrnYIgCA9izvWfrHevl3zW+rZD79mghLOfHp6OSlZ0cWNAUBL6/8WuN7N0fHcug2/8nEu/uAR6zwbw90HTZ8WNKzyeHfgEczNLD9SuXbt49913iYyMpFmzZjRv3pzw8HCmTJnCtm3bylRHdHQ0b731FkFBQdSqVYv27duTkJDAvHnz+OKLL0q9Njc3l2nTpqFSqUo85+rVq4wYMYKtW7cC0KFDB7y8vDh9+jRTpkxh7dq1Zf55BUEQHsRc+9/Jbl1DGf63pEzdc1il3NsSdPaw4d1mjpKyXy9kEp6sLuGK0uk9G0o+y2+IHqinVaX3QCUlJTF79mwcHR1ZunQpDRvmv2wXLlwgMDCQBQsW0LFjR6pXr15iHQaDgS+++IKsrCxmzZpFjx49AEhNTSUwMJC9e/fSpUsXunXrVuTahIQEZsyYQVRU6dNLv/76a9LTli2nIgAAIABJREFU03nzzTcJDAxEocjfmfL06dNMnTqVX375hQ4dOtCgwdP/W5ogCI9X8flPlZNAbr3vD8lnXcOm6J9rUSn3thTTWjqx7VoONzJ1AOgMMPWEiv293FHIy9cLWHQILy5/RfIHjIoIT55K/xvdtGkTarWaYcOGmYInAB8fH0aOHEleXh7bt28vtY6TJ08SGxtL69atTcETgKurK9OmTQNg48aNkmu0Wi2bNm1ixIgRREVFUbt27RLrj4+PJyoqCg8PD0nwBNC2bVsGDhyITqfj4MGDJdYhCIJQVmFJGrLuy3+qYSencWXkP6WrUJ4IkhSpewx9IjYNrkgOVnK+bycdsjubpGHF5awSriiZwc0dg31Bj5YsNxtZcsIjt1GwPJUeQIWGhgLQuXPnIse6dOkCwIkTJx66Dl9fX9zc3AgPDycrq+DlDw8PZ968eeh0OqZPn864ceNKrD8tLY3mzZvToUMHSfBkVLduXSC/N00QBOFRBZsp/8nq0A5kmvs2Da5WA12rFx/7fS3Ra5529PWSbjz85Zl0ErJ15atIJitmGO/KozZPsECVGkAZDAbi4uKQy+XUr1+/yPG6desil8u5evUqhlIWNLt6NX9MuaThs7p166LX64mLK5g+amdnx7Bhw9i6dSsDBw4stZ0tWrRgxYoVfPTRR8Uev3jxIkCpw4yCIAhlVdwCmo+dOg+rg9Lefs3Lg5/ITYMrymx/F5ysCgLXDI2BH6Myy12PrlACvsiDejpVagCVnp6OWq3G2dkZKyurIseVSiUuLi7k5uZKeo8KS07O32qgWrVqxR43lqekpJjKfHx8mDp1Kq6uro/yIxAfH8+ePXuQyWSmHjNBEISHpdEb+Dux8P53jz//Sfn3IeTpqabPBlt7NJ17Pvb7WjIPBwUzXpCuvP7b5SyScsvXC1UkD0oEUE+lSg2gcnPzFyiztbUt8Rwbm/zfvHJycko8x3ispHqMdWRnZz9UO0uSlpbGtGnT0Gq19O7dW5LDJQiC8DDOJanJLpT/1KjKY+4FMhiwKpQ8runcC+wcHu99nwBjn3Ogpl3BV2O21sCi8+XrhSq8BITiphjCexpVal9tWcb0jUN3pQ3hGdd4Kqm+0q59WKmpqUyZMoWrV6/i7e3Nhx9++MBrYmJiHuqYUDzxzMpPPLOHU5nPbfsNJVDQ4+TroCY2Nvax3tPp6gUa3bfAo0EmI6ZxK9SP8HM/Te/asJpKfogr+DtZfD6DXvaJlDWulav1+N73WXb3JrEXojBYSYdmn6ZnVlkq+5k1bty4xGOVGkDZ2+fvPZSXl1fiOWp1fle2nZ1diecYj5VUj7GO0nq6yuPGjRtMnTqV69ev4+3tzY8//limukt68DExMaX+pQhFiWdWfuKZPZzKfm4XryYBBf+X9WxSjcaNH29PkO2fyySfdW064dX24RcHftretQ/q6VlzJ4Gk3PwVybN0Mvbn1mD6C2XfWFnv7oH83m0AZAYDTeyU6OsXPKOn7ZlVBkt7ZpU6hOfg4IC9vT1paWlotUXXZtVqtahUKmxsbHByciqxHnd3d6AgF6ow4+y4knKkyiMyMpJx48Zx/fp1WrduzaJFi3BxcXnkegVBENQ6AycL5z895vWfZLfjUUaclLbjtdcf6z2fNA5WcgKLWVwzXV32LV4KD+PJb4g98Z42lRpAyWQy6tevj06n4/r160WOx8fHo9frH5hbZJx9d/8sOyODwUB8fDwKhaLYmX7lERoayjvvvINKpeKVV15h4cKFODo6PvhCQRCEMjh1T5r/VNNOTsPHnP9kvW+z5LOuYVP0jZo91ns+icZ5O+BiXZAmolIbWH6p7OtCiaUMnn6Vvg6UcQ+5o0ePFjlmLOvQocND1xEREUFqaiq+vr44ODx8N3hUVBQfffQReXl5vPHGG3z11VdY/z979x0eVZX+Afx779T0QiCFJJBAAAlLKCICUmQXBAQJEkVg6asoUfNbV8QCMTYWUFl3cZUmIKhIdGkiIMUCCAQBCWCQQBJCAiSkh0wy9d7fH3HKnZLGzGRm8n6eZx93zr1z78lkmHlzznveI3VOZWBCSNvwww2l4PGICAfXf7pTCfHP3wmaNA/R6JM1/lIWT/cU/sH8cVYNNFzTcmx1UcI/4GlTYc/j9ABq/PjxkMlk2Lx5s6GeElC/lcuWLVsgk8mQlJRkaC8sLMS1a9dQU2NcBdGvXz/ExsYiIyNDULW8oqICy5cvBwBMnz69xX1UKpVYvHgxVCoVJk2ahBdeeMFpm3oSQtqO728K8zhHdrRP3qYtku93g9EYpwy5dqHQ3jvUofd0Z0/39BXUhbpdx+FQobKBZxiZj0CJCnIAByxwIq3H6RXTIiIikJKSghUrVmDevHkYMGAAeJ7H6dOnodPpkJaWhuDgYMP5ycnJuHXrFlJTUzF+/HgA9avwlixZguTkZCxduhS7d+9GSEgIzp49i+rqaiQmJmLo0JZ/KHz77be4ebM++a+qqgqpqalWz+vbty8mTZrU4vsQQtqucqUO50o1grYREQ4soKlRQ3JYuFm7ZtSjbbpwZmMCZSwejfHCp9nGkjhfXK3F2Gjbi5z0+A4R4KUyMOr6IJm5UwWmqhx8YDuH9Zc4V6v8y0lKSkJoaCi2bNmCc+fOQSKRICEhAXPmzMF9993XpGvEx8djw4YNWLt2LU6fPo2cnBxERUVhwYIFmDhx4l317+zZs4b///3339s8TyQSUQBFCGmRn26pYDoe0StYgg5elltH2Ys443uwVaaFM73qaz+RBk3r6i0IoPYXKFGm1KGdvJHfFSsC1zEGorzfjU0FudBRAOUxWu1Pj6FDhzZplGjXrl02j8XGxmLZsmUtuv/48eMNI1rm3nnnHbzzzjstui4hhDTFD+bTd44cfbJWOHPYOMCbFsU05r4OUnT1F+Nqdf3KcQ0HfJVbZ5EfZQ0XaRZA3boO3Z8GOKyvxLmcngNFCCFtHc/z+P6GMIB60IEBlOjSrxBdN64C4xkWmlGTHXY/T8IwDKbFeQvavrjStF0uuNBI4bWKC+3WL9L6KIAihBAnu1qtRaHCuL+aXATcH+q4AEqyP13wWNf/AfAdIhx2P0/zRBdvsCbriM6Xa3ChXGP7CX/gwoQBFEsBlEehAIoQQpzsB7PRp8GhMniJHbPSl7l1HeLMk4I29UOPOeRenirCR2QxQvjFlcZrQvFmI1BsEQVQnoQCKEIIcTLz8gWOnL6zKJwZ0wNcXC+H3c9TTe8qnMZLz6mDWtdwWQIutKPgMVNaDGjUNs4m7oYCKEIIcSINx+PYLbMAylH1n2qqLAtnjnkMoLp2zTYu2gv+JpXJy1QcDjRWE0omBxfc3vCQ4TkwJbcc1UXiZBRAEUKIE/1yW40ak+1bOnixiA9yzIJoyQ/fGOoQAQAX3B7ae4c75F6eTi5mkBQjHIXanV/X6PPME8lpGs9zUABFCCFOZD5957DtW7QaSA6ZF86cDIipcGZLTY4VFtA8XKiCrpGtXXhKJPdYFEARQogTfVcgnPZ5MMIx03fijB/AVpYZHvMyORXOvEsDO0gRYDaNd7a04dV4NALluSiAIoQQJymo0QqWvzMARkU6IIHcVuFMHz/736sNEbMM/myWr/ZdI3lQVAvKc1EARQghTrLfbPRpYAcpQhrbEqQF2MuZEOVfMTzmGYYKZ9rJqEhhAHWgoJEAiqbwPBYFUIQQ4iR7rwu/bMdFO2b6TrpfOPqk6zsEvNmSetIyoyJlMM1YO1+uwa1anc3z+Q4R4BnjVy1bXgKoGlm9R9wCBVCEEOIEVWoOx4qECeRjHRBAMUWFEJ07Lmijwpn2EyIXoX97iaDtYEPTeGIJ+JAwQRNbfMMRXSNORgEUIYQ4wfc3lNBwxsdd/cWIC5DYfkILSQ58DYY3rgzTde4Grntvu9+nLRvd7Gk8s4KaxQV27xNxPgqgCCHECfaZTd85YvQJijuQHN0vaNI8RIUz7c08gPrxpgqqBqqSW67EoxEoT0ABFCGEOJiG4y1Wa42Nsn8AJfnxGzBq4324oBBo7xth9/u0db3bSRDqZfz6rNHyOFGssnk+HxYleEyJ5J6BAihCCHGwE8VqVKmNIxTBMhb3dZDa9yZaLSQHtwuaNH+ZBIjtP03Y1rEMY7kar4E8KPM98dgimsLzBBRAEUKIg+27Ltzy46EoOcSsfafVxL/8CLai1PCYl8qhGTHBrvcgRpZ5ULZHoCxrQdEUniegAIoQQhyI53mL8gV2n76zVjhz6BjA19++9yEGD3aUQWLyDXq1Wov8O1qr5/IhoeBFxi102OoKsMpaR3eROBgFUIQQ4kC/VWiRX2OsEyRlgZEd7Vt9nM2+AFHeZcNjnmGgGU2FMx3JT2I5DXvyttr6ySIx+A7hgiZZ+W1HdY04CQVQhBDiQF/lCEcahofL4Cux70ev1Gz0SZcwyCJxmdjf/WYB1ClbARQALlT4+5CXFzukT8R5KIAihBAH4Xge/8sT5j9NjvW26z2Y4hsQnT0maNOMocKZzjCwg3Ak8WQDK/HMt3SRUQDl9iiAIoQQBzlerEahwjh95y1mML6TffOfJAe3CwtnRneFrkcfu96DWGc+hZdVoUWVmrN6rvlKPJrCc38UQBFCiIOkm03fjYuW23f6rqYKkp++FTRpxjxOhTOdJFDG4p5AY3I4D+B0ifVpPPO9CKWVZY7sGnECCqAIIcQBlFoeO68Jp+8et/P0neTQTmHhzMB20A580K73IA0baJ5IXmw9gOLM9sOTVpVaPY+4DwqgCCHEAQ4UKlFtUjyznYzFg/ZcfadSQnrIrHDmQ49R4UwnM5/Gy7CRSM4HdwBvMjIouVMFaGwnnRPXRwEUIYQ4wFe5wum7R2O9ILFj8UzJkb1g7lQZHvPePtA8SIUzne3+UGFQfKZEDS1nZV88iRR8YDvDQwY8GMqDcmsUQBFCiJ1Vqjh8VyAsnmnX6TutFpL92wRNmpGJgJeP/e5BmiTGT4T2cuNXqULL42K5xuq5vNk0Hlta5NC+EceiAIoQQuxsd34dTBdjxfiJcG97+02tiU/9ALbUuAyel0iocGYrYRjGMg/KxjSeeR4UU0IBlDujAIoQQuzsiyvC6bvHuniDsdfKOJ6HZO+XgibtA2PABwTb5/qk2QaGmuVB2UgkpxEoz0IBFCGE2NG5UrXFCMTjsV52u77o/CmICnIMj3mGhXrsFLtdnzTf/WYFNTNuq8DzlnlQFiNQFEC5NQqgCCHEjj7OqhE8Hh4uQ9cA+03fSfd+IXisvXcY+NBIG2cTZ0hoJ4FcZHx8s5ZDgUkBVT2+PY1AeRIKoAghxE6Ka3XYbrZ1yzPx9kvsZnOyIPo9U9CmeXiq3a5PWkYqYtA3pPF98WgEyrNQAEUIIXbyyWUFNCbJ47F+IoyOtN/WLdJvtwoea+P7g4vpbrfrk5YzTyS3lgdlXguKqSyjWlBujAIoQgixA5WOx8bfFYK2p3r6grVT8jhzM99y02AafXIZ5gHU2VIrgZF5LSieakG5MwqgCCHEDv6XW4sSpXH4yV/CYHqc/Wo/SfdtE24a3KkbdD372+365O70CbHcWFhnpaAmrcTzHBRAEULIXeJ5Hh9nCUefpsd5w89OGwcz5SUQ/3xA0KZ5eCptGuxCwrxYhJgU1KzT8cip1lqcR7WgPAcFUIQQcpeO3FLhgkn1aQbA/J6+dru+ZH86GJ3xy5jrEAHtgGF2uz65ewzD4E/BwtWWF6xUJKcRKM9BARQhhNwFjueRdqZa0DY2Wo7OfmK7XJ+pKofkh92CNvXYKQArsvEM0lqaEkDRSjzPQQEUIYTchR15dfi1VPhF+fc/+dnt+pJ928CoVYbHXFAItEPH2u36xH56NWUEimpBeQwKoAghpIVUOh5vmo0+TewsxwCzFVktxVRXQHJ4l6BN8/A0QGKf6xP7Mh+BsrapMI1AeQ4KoAghpIU++V2B/BpjxWkxA6T2C7Db9SX708GolYbHXEAwNMMfttv1iX3FBYghM5lZLa7jUFwrrEhOtaA8BwVQhBDSApUqDu9mCkef5vTwQZcA++Q+4U4lJId2CJo0D08FpDIbTyCtTcwyuCfQbBSqwmwUimpBeQwKoAghpAX+df4OKlTGOj9+EgYvJdgv90n63ddgVKajT0HQjJhgt+sTx2jKNB6txPMMFEARQkgznSlR48PfhJsGp/zJD+297LMyjqmugOTA14I2zdgnAJn9toUhjtGilXhUC8ot2WmsuflOnTqFjRs34urVq9BqtejRowdmzpyJQYMGNfka+fn5WLduHc6dO4eqqipERUUhMTERSUlJYNmGY8PKyko8/vjjGDZsGBYvXmz1HKVSiS+//BL79u3DzZs34efnhyFDhmD+/PkICQlp1s9LCPEMNRoOT/5UDp1JkelwbxbP9LTfpsGSPV8IR5/8AqEZ+Yjdrk8cx2IlXhmNQHmqVhmB2rNnD5599llcuHAB8fHx6NWrFzIzM5GSkoIdO3Y0fgEA2dnZmD17Ng4cOIDw8HAMGjQIxcXFeO+995CWltbgc5VKJRYtWoTKykqb52i1WixcuBAfffQRamtrMWTIEPj7+2PXrl2YMWMGioroDU9IW/TaqSrk3hEmBv9rcCB87FZ1/DYk3+8UtGkmTAdkXna5PnGseLMA6kq1FnVa4ZYutBLPMzh9BKq0tBTLli2Dr68v1q1bhy5dugAAsrKykJycjJUrV2LIkCHo0KGDzWvwPI+0tDQoFAq88cYbGDu2viZKRUUFkpOTsX//fowYMQIjR460eG5xcTFeeeUVXLx4scF+btu2DRkZGRgyZAiWL18OqbR+2fBHH32ETZs2YcWKFVi5cmVLXwZCiBvak1+HT7NrBW3zevhgTJT9ghvpri1gNMZRCy64PTQP0uiTuwiQsujsJ8K1P4JsjgcuVWjQr72x9ATVgvIMTh+BSk9Ph1qtxtSpUw3BEwD07NkTM2bMgEqlws6dOxu4ApCRkYGrV6+if//+huAJAIKCgrBo0SIA9QGQKa1Wi/T0dEyfPh0XL15Ex44dbV6f53ls3boVDMNg4cKFhuAJAJ5++ml06tQJx44dw40bN5r1sxNC3NdNhQ7P/ywctY4LEOOtAf52uwdTXAjx0b2CNvXEWbTyzs00lgdFI1CewekB1IkTJwAAw4cPtzg2YsQIAMDx48dbfI2EhAQEBwcjMzMTCoVxc8/MzEy899570Ol0ePnllzFv3jyb17969Spu376NuLg4RERECI6xLIuhQ4cK+kEI8WyVKg5JB0pRruIMbWIGWDcsCN5i+32MSndsAqMzTg9yoR2hfWCM3a5PnKOxiuR8cAfwMKsFpbXMlSKuzakBFM/zyMvLA8uyiImJsTgeHR0NlmWRm5sLnuetXKFebm4uACA2Ntbq8ejoaHAch7y8PEObl5cXpk6diu3bt+PRRx9tsJ/665uOkJnq3LkzgPpAixDi2Wq1HJ44VIasSq2g/dV+/ugTYr+K4Oz1qxCfPCxoU0+aA4hbba0PaaFGSxlIpND6GkcuGZ4HU1HqjK4RO3Lqv8zq6mqo1WoEBQVBIpFYHBeLxQgMDER5eTkUCgV8fa3vZl5WVgYANlfC6dvLy8sNbT179kTPnj2b1M/S0vo3crt27awet3Z9Qojn0XI85vxYgZO3hZWix0bJkdLL+udTi/A8pF9+DMbkD0ddZCy0Ay3zOInrsxZAcTwP1qQCudo/CJKaKsNjprwEfPtwp/WR3D2njkAplfXLcuVy27VMZLL6uf66ujqb5+iP2bqO/hq1tbVWj99tP5vSR0KIe9NwPBYcq8B3BUpB+6BQKTaMCIaIZWw8s/lE509B/NsZQZv6sSeBRsqxENcU6SNCgNT4/qjR8oakcj2Nf7DgMUvVyN2OU0egGKbxDxz91F1DU3j6Gk+2rtfQc5tCf93Grt/Yfa5cudKiY8Q6es2aj16zljl36Qpe/l2Gk5XCwphdvTm8HVOJwjzbJVCajdOhx+YPBE13Ot+Dq97tADf6/dF7Tairlwxn1Mb3z8HfrmNkiDGI6ugfJDi/LDsLt0M6Oa1/7srZ77O4uDibx5waQHl7ewMAVCqVzXPU6vqhci8v28uC9cdsXUd/jYZGuu6mn029vq0X/sqVKw3+Uogles2aj16zljl+8SoW5fjjQqUwbyXaV4RvHg5DuLd9qo3riX/4BvLSW4bHPMNANPcFxHVyn98dvdcs9SurxJkq40KmGu/2iIszbvVTdUIYQLVneQTQa9ggV3ufOXV82MfHB97e3qiqqoJWq7U4rtVqUVlZCZlMBj8/23tKtW/fHoAxF8qcPoeppdXC9c9z1PUJIa4ps0yNOedlFqumOvmKsPOhELsHT6irhXTHBkGTdshocG4UPBHrupltKp1dJXxPqWkKz+05NYBiGAYxMTHQ6XS4fv26xfH8/HxwHGdz9ZuefvWd6So7PZ7nkZ+fD5FIZHWlX1Po72/t+gBw7do1AEDXrl1bdH1CiGvheR4bf1dg9LclKFYJPxb7hkhwcHx7xPrbf8Be+s1nYKsqjP2QyqCebLvECnEf5gHUlSrhoIHGbAqPKStxeJ+IfTk9Q1G/191PP/1kcUzfNnjw4BZf4/z586ioqEBCQgJ8fFq2N1VMTAzCw8Nx+fJlFBcXC45xHIcjR46AYRjcf//9Lbo+IcR11Gg4zD9Sgb+fqIRKmOeLh6Lk2DMmBB3stEmwKebWdUj2pwvaNGMeBx9sexcG4j7iAsy2dKnSCvJm1eYBFI1AuR2nB1Djx4+HTCbD5s2bcenSJUN7VlYWtmzZAplMhqSkJEN7YWEhrl27hpoa487n/fr1Q2xsLDIyMgRVyysqKrB8+XIAwPTp0++qn48++ih0Oh3efvttwWq71atX4/r16xgxYgQiIyPv6h6EkNZ1qUKDkd+UID3XckXtk/f44PORwXbb406A5yH7bBUYnXFUggsMgXrcVPvfi7SKcG8WvmLjQqQ7Gh5FdcZCrBq/QPCM8b3F3qkE1Lbzg4nrcXqFtoiICKSkpGDFihWYN28eBgwYAJ7ncfr0aeh0OqSlpSE42Dg3nJycjFu3biE1NRXjx48HUL8Kb8mSJUhOTsbSpUuxe/duhISE4OzZs6iurkZiYqKhWnhLTZs2DceOHUNGRgYmT56M3r17Iz8/Hzk5OQgLC8PChQvv6vqEkNa19Wot/nGiErVmG716sTz+80AwHuvi7bB7i84cg/jiL4I29dRnAC/H3ZM4F8MwiAsU49dSY+5TdqXWmEfHisAHBgsKaDIVpeBDbW8zRlxLqxQZSUpKwvvvv49evXrh3LlzyMrKQkJCAlatWiXY264h8fHx2LBhA0aOHInr168jIyMDYWFhePnllw374d0NiUSCVatWYd68eZDL5Th27Bhqa2sxadIkbNiwgRLICXFTdVoezx2rwDNHKyyCp3sCxdjcR+nQ4AkqJWRffCho0vboQ0UzPVCcRR6U5ZYupiiR3L202h4BQ4cObdIo0a5du2wei42NxbJly1p0//HjxxtGtGyRy+WYP38+5s+f36J7EEJcyw2FDtMPl+FcmeW+Y9O6euO9QQG4kVft0D5Iv/kMbJkxt5JnWahnPA80oU4ecS/dAiQAjNPD2WaJ5HxweyDH+Jgpp0Ryd0KbLBFC2oRfbqvx1+/LUGyShwIAchHw3qBA/DWuZYtOmoMtyIVk71ZBm2bUZHCR1vf1JO7NfATqqlkAxZmNQFEA5V4ogCKEeLytV2uR8nMF1MLYCV39xdj0YDB6BVvuzWl3nA6yje+C0RmX+nEBwVBPmu34e5NWYVkLynwEiqbw3BkFUIQQj/afC3eQetpyWu6hKDnWDQuCv9Q5qaCSQzsgyrkkaFPNSAG8HD/yRVpHrL8YLANwf6TaFSp0UGg4w8pOLri94HwagXIvtFMlIcQj8TyPf/5abTV4eqG3L74YGey04IkpuQXp1+sFbdr+Q6EbMNwp9yetQyZi0NlXWEPsarVxFIq3CKBoBMqdUABFCPE4PM8j9XQ1lp+7I2iXiYB1w4KQ2j8AItZJSds8D9mnK8GolMYmL5/60Sfi8eICLQtq6tEUnnujAIoQ4lF4nscrp6qw6mKNoN1HzODrUSGOLVFghfinbyG+IKz5pJryNPggKoXSFjSUB8UHBoNnjV/DTE01YBJoE9dGARQhxKOsuliD1VkKQZu/lMHOh0IwNFzm1L4wt29a1HzS9UiAdvjDTu0HaT0WtaAqTRLJWRH4QGEgbVpYk7g2CqAIIR7jf7m1FjlP7WQsvhkTggEdpM7tDKeDfN0/hVN3MjmUc18CWProbSssR6ComKanoH/FhBCPcKxIhWeOVgja/KUMdo8JQUI7JwdPACT70iHKviBoU01Npq062hjzACqnWgsdZ6yAz7WjRHJ3RQEUIcTtXanSYPrhMkGdJwkLbHmwHeKdUePJDHv9KqTbNwjatL0HQjui4d0PiOcJlovQTmb8qlXqgAKFsRYYH0SlDNwVBVCEELdWq+Uw6/tyVKmF+9p9+EAQhkc4N+cJAKCqg/yjN8FojVM1vI8/VPNeou1a2qhugeZ74pkkkrejKTx3RQEUIcStvZJRhaxKYYXnJf38McXJq+30ZJ9/CPbWdUGbatbfwQe2a5X+kNZnnkhuuhKPtnNxXxRAEULc1te5tfg0u1bQ9lisF17o7dsq/RFnfA/JT98K2jRDx0I78MFW6Q9xDZYr8UxGJ2kKz21RAEUIcUs5VVr838+Vgrau/mKsHBwIphWmypiSW5BtfF/QxoVHQTXjeaf3hbiWbgHCPLxsmsLzCBRAEULcjlrHY+5P5ajRGvOeZCJgw4gg+Ela4WNNo67Pe6oz1p/ixRIon0kFZF7O7w9xKeYr8QTbufgHgRcZjzOKO4Cqzml9Iy1HARQhxO38+8IdZJYJ6+ksvS8AvVuhXAEASL/8GKJc4UbB6ilPg+sU1yqDDgZcAAAgAElEQVT9Ia4lylcEscmg6O06DrX6hXgsa1GVnqbx3AMFUIQQt5JdqcG7mcI97iZ2lmNud59W6Y8443tID+0QtGn7DIZm1KOt0h/iesQsgyizTYVvKI0RlfmmwjSN5x4ogCKEuA2O55FyvFJQ7ylEzuJfg1op7+nWdcg2vCto40LCoHzqFSpZQARi/ITTeIV1xq9fWonnniiAIoS4jc3ZtThRrBa0LRsYgGC5yMYzHEilhPzD18EojfkqvFgC5bNpgI+f8/tDXFqMv1kAZToCZVbigqksc0qfyN2hAIoQ4hZu1eqQ+kuVoG1URxkmx7ROkrZs8wcQFeYJ2lTTngUX06NV+kNcW2e/BqbwzEsZ0IbCboECKEKIW3glowrVGuOqOx8xg/dbqWSB+MheSI7tF7Rp7v8ztCMfcXpfiHuwmMJTGr9++SDhCBRLAZRboACKEOLyThSrsPOacGn34n7+iPYV23iG47DXr0K2+QNBGxceDdWcf1DeE7Gps0UAZXyvcOar8GgKzy1QAEUIcWkcz+O1U8Kpuz7tJHjqnlZYdVenqM970hjzsHipHMpn3wDkrbN1DHEP5lN4RUoGGq5+RJUPNAugKiiJ3B1QAEUIcWlf59bhbKllzScR6+TRHp6H7JN3wRbfEDSrZr8ALjLGuX0hbsdXwqKDl/ErVwcGhTX1xaAsksirygFOB+LaKIAihLisWi2HN05XC9oe6STH4DCZ0/si/n4XJL/8KGjTDB8P7ZDRTu8LcU/meVDX7vxRkVwqA+/jb2hnOA5MtXCbIuJ6KIAihLis/16swY1a41/iEhZ4494Ap/eDzbsM2Rf/FbTportA9dfnnN4X4r7Mp/Hy7hjf25xZIjmtxHN9FEARQlxSUa0OH1yoEbTNv8fXop6Ow9XWQP7fN8BojdOIvNwbyuQ3AKnzR8KI+zIfgcq7Y7InHiWSux0KoAghLmnl+TtQmGwWHCxj8WKCkwtU8jzkn6wAW3JT0Kya+yL4sEjn9oW4PfPgP890U2FKJHc7FEARQlzODYUOmy4rBG0v9/FDoMy5H1mSQzsgPn1E0KYZORHagSOd2g/iGWIspvBsj0CxNALl8iiAIoS4nJXn7wj2u4v0EWG2kzcLZvN+h3TrR4I2Xac4qKYucGo/iOcwrwV17Y4OPF8/yspZjEBRDpSrowCKEOJSrtdosTlbOPr0Uh8/SEVOLFuguFOf96QzGSGQe0OZ/DrlPZEWay9n4SM2vo8VWh4lyvq/FCxyoCiAcnkUQBFCXMr7mXegMRl96uQrwtSuTixSyfOQb3gXbMktQbNy3kvgQynvibQcwzCWK/H+yIMy386FAijXRwEUIcRlXLujxedXagVtL/Xxg8SJRTPb/XrUIu9J/edE6O4b4bQ+EM9luRJPX0zTPAeKAihXRwEUIcRlvJt5ByYL7xDrJ8KULs4bfWKKCtDx4DZBm65TN6gp74nYiflKPH0xTT4gCDxj/EpmaqoBky2DiOuhAIoQ4hKu12jx5VXh6NOivv4QO2v0SauFfPU7EJnucyeTQ7kgFZBIndMH4vFs1oJiReADggXHqBaUa6MAihDiEj68WAOdyehTXIAYSTFeTru/dOcmiPJ+F7Sppj9H9Z6IXZmXMrhmUo2cEsndS7MCqH//+9/Izc11VF8IIW1UqVKHLdnC0af/+5Ov0zYMZi+fh2TP54I2bf+h0A4b55T7k7bDvJSBsBaUMJGcpQDKpTUrgDpw4ACmTZuGOXPmYPv27aipqWn8SYQQ0og1WQrUmQw/dfQW4bFYJ+U+1dZAvvYdMLzx/lxgOyjnvggwTiydQNqESF8RTCty3K7jUPPHslMuqL3gXIYSyV1aswKob775BitXrkRYWBj+9a9/Ydy4cUhNTcWpU6cc1T9CiIer0XBYd0n4x9iCXr5Oq/sk2/wB2NJiQZvqyVcAX+dvWkw8n4RlEOVrfRqPD6RSBu6kWbtysiyLwYMHY/Dgwaiursb+/ftx6NAhpKSkoEOHDpgwYQImTJiA0NBQR/WXEOJhPs2uRaXaOPoTKGUwq5tzRp/EJw5DcuKQoO32wL/Au9e9Trk/aZti/MSC3Ke8O1r0CpZY7odHSeQurcVJ5P7+/pgwYQIeffRR9O7dG0VFRdiwYQMSExPx+uuvo6qqyp79JIR4ILWOx38v3hG0PdXTF74Sx69vYUqLINu8UtCmi4zFzQcfdfi9SdtmvhLvmqGYJiWRu5NmjUABAM/zOHXqFPbu3Ysff/wRGo0GAwcOxPLlyzF48GCcPHkSS5cuxeLFi7Fq1SpH9JkQ4iHSc2txs9ZYdtxLxGD+PU7Y847TQb5mKZha45YxvEQC1TOLwdfpGngiIXfPvBr59Zo/pvAoidytNCuA+vDDD7F//36UlpYiPDwcs2bNwoQJE9C+vTHxbdiwYfjtt9+wbdu2Bq5ECGnreJ7HR78Jc59mdPNGO7nIxjPsR/LtlxBlnxe0qR9/GlxkLHDlisPvT9q2aF/hV+91RX0AZTWJnOdpMYOLalYAtW3bNgwfPhwTJ07EgAEDbJ4XHx+PZ5555q47RwjxXD/dUiGrwriEm2WA5Hhfh9+Xzfsd0h0bBG3aPw2AZhRN3RHnME8iL9CXMvD2BS+RgvmjmCujUgJ1CsDb8f8uSPM1K4Bav349YmNjIZFILI4plUpcvnwZCQkJGDZsWKPXOnXqFDZu3IirV69Cq9WiR48emDlzJgYNGtTk/uTn52PdunU4d+4cqqqqEBUVhcTERCQlJYFlLXMoSkpKsH79emRkZKCsrAyhoaEYO3YsZsyYAanUstJwcXEx1q1bh5MnT6K8vBz+/v7o378/5s2bh9jY2Cb3kxBiyXz0aUInOTr5NTuroHlUdZCvfgeMzqR4oV8AVH97mf7KJ04T7Ws5hcfzPBiGAR8UAub2TcMxprIMPAVQLqlZmZqzZs3CpUuXrB47f/48nnvuuSZdZ8+ePXj22Wdx4cIFxMfHo1evXsjMzERKSgp27NjRpGtkZ2dj9uzZOHDgAMLDwzFo0CAUFxfjvffeQ1pamsX5xcXFmDNnDnbs2AE/Pz8MGTIECoUCa9asQUpKCrRareD8GzduYNasWdi9ezdkMhkeeOABBAUF4eDBg5g1axYyMzOb1E9CiKXsSg0OFKoEbQt6Ov5LQvbFR2CLCgRtyrkLLZaPE+JIIXIWMta48rRGyxtWolpsKlxR4tS+kaZr9M+91NRUFBUVAajPWVi+fDl8fCyTPAsLCxEQ0HjdlNLSUixbtgy+vr5Yt24dunTpAgDIyspCcnIyVq5ciSFDhqBDhw42r8HzPNLS0qBQKPDGG29g7NixAICKigokJydj//79GDFiBEaOHGl4zooVK3D79m3Mnz8f8+bNAwDU1dVh4cKFOHXqFLZt24bp06cbzl+1ahXKy8sxdepUpKSkGEa0Nm7ciI8//hjLli3D1q1bG/15CSGWVmcpBI/7h0hwXwfH7jcnOnsMkh+/EbRpRkyArt8DDr0vIeYYhkGEjEdenXHUM/+OFkEyKbigEJiOTzEVVMrAVTU6AjVq1CiIRCKIRCIwDAOWZQ2P9f+TSCTo3bs33nnnnUZvmJ6eDrVajalTpxqCJwDo2bMnZsyYAZVKhZ07dzZ4jYyMDFy9ehX9+/c3BE8AEBQUhEWLFgGAIIk9Pz8fx44dQ2RkJObMmWNo9/LywuLFiyESiZCenm5xDwB48sknBdOBs2bNgo+PD3JyclBdXd3oz0sIESpX6rDVbNPgZ+J9wThwCo2pLIN8w7uCNi4sCqppCxx2T0IaEibnBY+NK/HMa0HRSjxX1egI1NChQzF06FAAwMSJE/Haa6+hR48eLb7hiRMnAADDhw+3ODZixAisXr0ax48fx1NPPdWiayQkJCA4OBiZmZlQKBTw8fHByZMnwfM8HnjgAYvcqLCwMHTv3h1ZWVnIzc015DbpP8xLSkrg62ucWqitrYVKpYJEIoG3t5O2miDEg3yaXWuxbcvEzg7cNJjnIVu/HMwdY206XiSC8unXAJnzNismxFSEjANMxpoKFFSN3N00Kwdq165ddxU88TyPvLw8sCyLmJgYi+PR0dFgWRa5ubnged7KFerpNzS2lcgdHR0NjuOQl5cnON90xMtUp06dAAA5OTmGtsGDBwMAlixZgosXL0KpVCInJweLFi2CVqvFlClTIBY7OOGVEA+j4XiLbVuevMcHEgduGiw5tAPiC8LtptST5oCLaflnGSF3K9x8BOqO9WKaLFUjd1mNRgBPPfUUFi1ahC5dujQ4KgTUj9qsWbPG5vHq6mqo1WoEBQVZXcknFosRGBiI8vJyKBQKwciPqbKy+jdUSEiI1eP69vLycgD1eVfNOR8AXnzxRRQVFeH8+fOYO3euoI8vvPACpkyZYvPnJIRYtye/TlA401vMYHZ3xxXOZAtyId32saBN1603NA9Pddg9CWmKcJn1KTzOfDsXSiJ3WY0GUCKRcYiRZdm7ylNQKpUAALlcbvMcmUwGoD7B21YAVVdX1+B19Neora1t0fkA4Ofnh3HjxiE3NxfBwcHo3LkzCgoKkJeXh6+++goJCQm45557bP4cAHClgYJ8DR0j1tFr1nyu9pr957wMptMWY0PUKLmeA0d8RbBqFbp/8jYYjcbQppN54dLoadDk5Db4XFd73dwBvWbNEy4TTgBdLavFlSvlkFbVIN6kXVdSTK+tCWe/FnFxcTaPNRpAffyx8a+31atX31VHmhJ86afuGprC0+cx2bqe+XMbO9/a8xYvXozDhw8jJSVFsDpv586d+Oc//4nnn38e6enpCAoKsnk9Wy/8lStXGvylEEv0mjWfq71mF8o1+LX6tqDtxfs7Ii7IcjTaHmTrl0NSViRo08z5BzoPuL/B57na6+YO6DVrvtLfhIFAsVZU/xqqowXtEkUV4rp0AazUNmxrXO191qLfiH5EBwB++OEHfP755ygsLGz0efqka5VKZfMctbq+AquXl+3kTv0xW9fRX0M/4tTY+fp2/XknTpzA4cOHMWTIEEHwBACJiYkYP348qqqqsH37dpt9JIQIrTfLfRoaJsU9DgqexD8fgOToPkGb5oEx0A76i0PuR0hztZMAprsWVat5VKo4QCoD7+NnaGd0OjB3Kluhh6QxzQqgCgsL8dhjj2HTpk0A6iuTv/zyy/jPf/6D6dOn48KFCw0+38fHB97e3qiqqrIoXAkAWq0WlZWVkMlk8PPzs3KFevq99/S5UObMc56ae/6ZM2cAAPfdd5/V8/UJ5pcvX7bZR0KIUaWKQ3pOnaDtyXscUziTuXUdsk9XCtq48GioZqY45H6EtATDAJE+Znvi1dR/L3LmK/EokdwlNSuA+vDDD6HRaDBkyBDodDqkp6dj5MiR+O6779C3b99Gp/gYhkFMTAx0Oh2uX79ucTw/Px8cx9lcLaenX32nX2Vniud55OfnQyQSGVb66c/Xr8Yzd+3aNQDGVXp37twBIMz/MqVv15jkVhBCbPvsisKidMG4aNu5kC1WVwv5f1Lr9xD7Ay+RQpmcRiULiMsx39KlQF8LihLJ3UKzAqgzZ85gwYIF6N27Ny5evIiqqiokJSUhMDAQkydPRlZWVqPX0O9199NPP1kc07fpR3haco3z58+joqICCQkJhorp+vOPHj0KjuME5xcVFSE7Oxvh4eGGQKtz584AgOPHj1u9/6lT9UuiXWkulhBXxfE81v8urDw+t4cPxPYuXcBxkK/7J0Q3rwmaVX99HlwU7V1JXI+1PfEAK8U0qRq5S2pWAKVSqQxJ0ydPnoSXlxcSEhIAwFCpvDHjx4+HTCbD5s2bBfvqZWVlYcuWLZDJZEhKSjK0FxYW4tq1a6ipMeZP9OvXD7GxscjIyBBULa+oqMDy5csBQJC71LFjRwwaNAj5+fmCMgt1dXV45513oNPpMG3aNEP7Qw89BG9vbxw/flxQ0RwADh48iB07dkAmkyExMbHRn5eQtu5QoQrX7hg375WywMxu9i9CK/nmM4jPHBW0aQb9BdrhD9v9XoTYQ7Sf9Sk8i1pQVEzTJTWrEmTnzp1x+vRp9O3bF4cOHcK9995rKCa5d+9eQ0HKhkRERCAlJQUrVqzAvHnzMGDAAPA8j9OnT0On0yEtLQ3BwcGG85OTk3Hr1i2kpqZi/PjxAOpX1S1ZsgTJyclYunQpdu/ejZCQEJw9exbV1dVITEw0VE/Xe+mll/C3v/0NGzduxJEjR9CpUyecP38epaWlGDx4MCZPnmw4Nzg4GG+88QZee+01vP/++/j6668RGxuLwsJCXLlyBWKxGEuWLEFERERzXj5C2iTzwpmTYrzQ3sv69HhLic6dgHTHRkGbLrorVHNerE82IcQFRflYn8LjaDsXt9CsAGrmzJlYsmQJ0tPToVQq8corrwAAZs+ejcuXLzdpLzwASEpKQmhoKLZs2YJz585BIpEgISEBc+bMsZm4bS4+Ph4bNmzA2rVrcfr0aeTk5CAqKgoLFizAxIkTLc7v2LEjNm3ahDVr1uD48eMoLCxEREQEpkyZgieeeMKiqvjw4cOxadMmbN68GadPn8bRo0fh5+eHkSNHYtasWY3WgCKEALnVWhy6IVz9+pSdk8fZ/CuQf/wWGJMyJLyvP5TPvwXIHJBnRYid2JzCo+1c3EKzAqi//OUvCAkJwfnz53HvvfeiZ8+eAOqn1ObPn2/INWoK0z32GrJr1y6bx2JjY7Fs2bIm3zM0NBSpqalNPr9r16548803m3w+IUTok98VMK3K1i9Egv7tpXa7PnP7JuTvvwRGaSyCy7MslMlp4NuH2+0+hDiC7Sm89oJ2GoFyTc3ezK1Pnz7o06ePoO3555+3W4cIIZ5BoeHw2RVh8rg9Sxcw1RXwem8h2KoKQbt66gLoevaz230IcZRQLxZSFlD/sbapUs2jWs0hwGwEinKgXFOzA6hTp07h6NGjqKurs1otfMmSJXbpGCHEvX2dW4cqtfEzop2MxaTOdiolUFsD+cpXwBbfEDSrxzwOzegkG08ixLWwDINIHxFyTRZZFNTo4B8QBJ5hwfD1kRVzpwrQqAGJ/UZvyd1rVgC1detWfPDBB5BIJAgICLBYdXc3++QRQjwHz/NYa5Y8PrObN+RiO3xG1FTB672XIMoTFrLVDPoL1FOevvvrE+JE0X5iQQB1vUaL+GAv8AFBggKaTFU5+JCw1ugisaFZAdSXX36JBx98EGlpaQ1uCEwIadtOFKvxW4VxtwGWAeb08Lnr6zJV5ZCv+AdEhcIiutr4/lD9bRHtF0bcToOJ5KYBVEUpBVAuplmfNuXl5Xj00UcpeCKENGjdJWHu09goOaJ9m50xIMCUFsFraYpF8KTrGg/lc28BYsfsq0eII9kqZUCJ5K6vWQFUTEwMCgoKHNUXQogHuKnQ4Zt84b53T91zd6NPoku/wjttPtgi4eeP9p6+qFv4LuBl/8KchDiDzZV4lEju8poVQCUnJ+PTTz/FiRMnUFtbC47jLP5HCGnbNmUroDVZX9ItQIxh4bKWXYznIdn/FeQr/lGfSGtC23sglC8sA+QUPBH3ZWsKz6KYJm3n4nKaNaa+YsUKVFdX4+9//7vV4wzD4MSJE3bpGCHE/ah1PD69bF66wKdFC0yYqnLINn8A8ekjFsc0A0ZANf9VWpVE3J751HaBzf3waENhV9OsAGrMmDGO6gchxAN8k1+H4jrjSLSfhMETXZs5QsTzEJ88DNln/wFTUy08xDBQT5oDzYS/UsI48QhhXizEDAyjtmUqDjUaDgEW27nQCJSraVYA9eSTTzqqH4QQD2CePP5EV2/4SZoe6DA38yH78mOIM09aHOO9fKB8ejF0fZq+4wEhrk7EMoj0FQk23C5U6OAfaLahMCWRu5wWLYu5ePEiMjIyUFJSgtmzZyMvLw/33HMPAgMD7d0/QoibyCxT4+RttaDtySaWLmAqyyDdsQnin741FA80pYvpDuXTi8GHRdmlr4S4kkgfswCqRoceQbQfnqtrVgCl1Wrx+uuv4/Dhw2AYBjzPIzExEZ9++ikKCwuxZs0adOzY0VF9JYS4sPVmo08jImToFthwaQGmohSSfdsg+eEbMGqlxXFeIoF60lxoxjwGiO6uDAIhrirSrJRBoUIHdPQHL5GA0WgAAIyyDqirpRWnLqRZSQRr167F0aNH8eabb+LQoUOGrVxeeeUVSKVSrF692iGdJIS4tgoVh69yawVtDY0+MSW3IPv0X/B+cSqk331lNXjSdfsTat9cD83DUyl4Ih4tyiKRXAswDPhASiR3Zc36VNq7dy+eeuopjB49GjqdcbixU6dOmDdvHj788EO7d5AQ4vo+y1ZAafxIQKSPCGOiLAvuMkUFkH7zOcQnDoIx+QwxxYVGQvX4U9D1HwrQ9lCkDYgyK2VQoDBZiVdyy9DOVpZBF9HJqX0jtjUrgKqsrESXLl2sHmvXrh1qamqsHiOEeC4dx2P978Lpu3k9fCBijcEPU1xYn+N08jAYK5uQAwAX2A6aCX+FZsQEQEwjTqTtsJjC09eCCgyB6RHKg3ItzfqUio6OxpEjRzBokOUqmF9++QVRUZTgSUhbs69Aifwa42iSTATM6Fafp8GUl0C6azPER74FY6PQLhcSCvXD06B9YAwgbWHBTULcWIMjUCZoOxfX0qwAaurUqXj77beh1WoxbNgwMAyDa9euISMjA9u2bcOLL77oqH4SQlzUx1nCkeekWG+EiDlIvtkK6a7NYDRqq8/jwqKgnjAd2vv/QiNOpE3raDYCdVOhg47jLbZzoWrkrqVZn1oTJkxAZWUl1q9fj927dwMAXn/9dUilUsycOROJiYkO6SQhxDVllqnxc5EwQFooy4X3kv+AvZlv9Tm6yFhoHvkrtAOGA6zI6jmEtCXeYhbtZCzKVPWjtDoeKKrj0MlsQ2GWkshdSrP/7Js+fTpGjRqFCxcugOM4+Pr6olevXggICHBE/wghLmx1ljH3SaZT4/NbX6LXj99ZPZcL7Qj1o3Ohve9BqiJOiJkoX5EhgALqV+JFmdeComrkLqXJAdR3332H7du347fffoNWW79btEwmQ+/evZGUlIThw4c7rJOEENdzu06H//1RuqBrbRG2Zv0HfWssR514vwCoJs+Ddug4mqojxIZIHxHOlWkMjwsVOitlDCgHypU0+mnGcRxSU1Nx8OBBtG/fHqNGjUK7dvVRcUlJCc6ePYtFixZh7NixeP311x3eYUKIa9jwuwJqDnjs9gmsvbwefjrLWk6aYeOgmjIf8KURakIaEulruRKP72hlPzyOoxFcF9FoALV9+3YcPnwYf//73zFlyhSLXdU5jsP27dvx/vvvY9CgQRg9erTDOksIcQ0qHY9PLtXg5fxdeDsv3eI41z4CyidfBte9dyv0jhD3Y1FMU6EDZH7gvX3A1NZPlTM6LVBTDfjTtmmuoNEwdu/evUhMTMQTTzxhETwBAMuySEpKwiOPPIKdO3c6pJOEENfyv6t3sOTCBqvBk2bACNS+uZaCJ0KawbIWVH2qDBdIieSuqtEAKi8vz2rdJ3P3338/8vOtr7ohhHgOTqVC503vYMHNQ4J2XiyBcub/QZX8OuDt20q9I8Q9RfnYqgVFieSuqtEpPKVSCT8/v0YvFBgYiPLycrt0ihDiorQa1Ly3GKNv/iJo1nn5QPV/S8H1SGiljhHi3syLaeqrkVMiuetqdASK4ziIRI3XamFZ1rC5MCHEA+m0kH/8FiKyhcFTmXcwVK+touCJkLsQImchM/mqrdbwqFJzVoppUgDlKiiVnxDSOI6DbP1yiE8fETRneUfg2ourwEXFtlLHCPEMDMNY3RPPfDsXlqbwXEaTirIsX74cPj4+DZ6jUCgaPE4IcVM8D9mWf0Ny/KCgOdsrDG+NeQPrunRspY4R4lmifMXIqTbuK1mg0KI37YfnshoNoPr27Wt19Z05f39/9O3b1y6dIoS4Dsn+dEi+3yVoy5O3x+iEV7F6YHQr9YoQz2N1BIr2w3NZjQZQq1evdkY/CCEuSHTmKKTbhJ8BhdIgjE54FWFRYRgSKm2lnhHieSwCKIUOfIywjAFTSWUMXAXlQBFCrGLzLkO++m0wJotDKkXeGJvwMvK8OiDlT35NGp0mhDSN+Uq8ghod+IBgQRtTXQn8sZ0aaV0UQBFCLDAVpZB/8CoYtcrQpgWLKfEpuOQTibgAMR6OlrdiDwnxPJE+wkmhQoUOEIvB+QcZ2hieB1NNJYNcAQVQhBAhrRby/6ZZrPZJ7jYHh4N7AQBeTPADS6NPhNiV7VpQVMrAFVEARQgRkKavgejKRUHbyshx+CRiJACge4AYSTFerdE1QjxaR7McqFt1Omg43qKUASWSuwYKoAghBqJTP0L63VeCtgNBf8LLXaYaHr/S1x8ilkafCLE3mYhBqJfxa5njgZsKnUU1cpZKGbgECqAIIQAA5mY+5J8sF7SV+IRgxj3J4Jj6j4r4IDEe6Uy5T4Q4itWVeLQfnkuiAIoQAihrIV/1OhhlnaGJE4nxSPfnUSY17oX5al9/yn0ixIGifIWJ5AU1OnBBZqUMKqiUgStoUiVyQogH43nINr4P0c1rguZV/ebgF58uhsd9QyQYRyvvCHEoqyNQVEzTJdEIFCFtnOTQDkhOHha0XUsYiX94Dxe0vdrXn+o+EeJgkRYr8bSWSeSUA+USKIAipA1jr/4G6daPBG3ajjGYEDETMAmWhoZJ8ZeOMmd3j5A2J8psBKrAyggUS2UMXAIFUIS0VdWVkH/4OhidsaoxL/fGmtGLcKlOYmhjGWDZwEAafSLECSxHoHTg/QLBi4ztTG0NoFI6u2vEDAVQhLRFnA7yj9+0+Ev21syX8GqBv6BtXncfxAdLQAhxPPMRqEKFDjzDgA+glXiuhgIoQtog6faNEGedFbSpxzyOhbreUGiNe98FyRi82s/f/OmEEAcJkrHwERtHexw/RzAAACAASURBVBVaHhUqjkoZuCAKoAhpY0S/Hof0m88EbbruCTg8dDa25dQJ2l/t648gGX1MEOIsDMNYrMQrUOjAm5UyYKmUQatrtTIGp06dwsaNG3H16lVotVr06NEDM2fOxKBBg5p8jfz8fKxbtw7nzp1DVVUVoqKikJiYiKSkJLCs5Yd+SUkJ1q9fj4yMDJSVlSE0NBRjx47FjBkzIJVKLc7neR579uzBjh07kJubC51Oh7i4OEydOhWjRo26q5+fkNbA3L4J+dp3BG1cQDBKnlyCBT9WC9p7Bokxp7uPM7tHCEF9HtTlKmNuYmGNDgPMSxnQCFSra5U/Lffs2YNnn30WFy5cQHx8PHr16oXMzEykpKRgx44dTbpGdnY2Zs+ejQMHDiA8PByDBg1CcXEx3nvvPaSlpVmcX1xcjDlz5mDHjh3w8/PDkCFDoFAosGbNGqSkpECr1QrO53keaWlpeOutt5CTk4N+/fohPj4ely5dwmuvvYZt27bZ46UgxHnUKshXpYKpVRiaeJaFMjkNL18WoeCPjUsBgAHw3v2BENOWLYQ4nfWVeOb74dFKvNbm9BGo0tJSLFu2DL6+vli3bh26dKkv1JeVlYXk5GSsXLkSQ4YMQYcOHWxeQx/cKBQKvPHGGxg7diwAoKKiAsnJydi/fz9GjBiBkSNHGp6zYsUK3L59G/Pnz8e8efMAAHV1dVi4cCFOnTqFbdu2Yfr06Ybz9+zZg3379qFLly5YtWoVQkLq37znzp3Ds88+iw8++ACjRo1CcHCw3V8jQhxBtuXfEF2/KmhTT3kGe73j8NmVckH7gnhfDA6jsgWEtIZIs2rkhTVWtnOhAKrVOX0EKj09HWq1GlOnTjUETwDQs2dPzJgxAyqVCjt37mzwGhkZGbh69Sr69+9vCJ4AICgoCIsWLQIAwQhRfn4+jh07hsjISMyZM8fQ7uXlhcWLF0MkEiE9PV1wj40bN0IkEmHp0qWG4AkA+vTpg8TERHTo0AGXLl1q2YtAiJOJf9wDyZG9gjbtgOEoHj4JKT9XCtq7B4ixmBLHCWk1ljlQlsU0WZrCa3VOD6BOnDgBABg+fLjFsREjRgAAjh8/3uJrJCQkIDg4GJmZmVAo6qcqTp48CZ7n8cADD1jkRoWFhaF79+64desWcnNzAdRPDxYWFmLw4MGIiYmxuMeLL76IXbt2YciQIY38tIS0Pjbvd8g++7egjQuPQu3cl5D8cxWK6zhDu4gBVg8LgpeYpu4IaS1RVmpBceZTeFSNvNU5dQqP53nk5eWBZVmrgUl0dDRYlkVubi54nrdZuE8f6MTGxlo9Hh0djfLycuTl5aFXr16G801HvEx16tQJWVlZyMnJQWxsLH7//XcA9aNiHMfh2LFjOH36NFQqFbp164Zx48bBy8ur2T8/Ic7GlN2G/IPXwGg0hjZeJkfdc2/hrSwt9hUIi/H9I8EPfUMsF1QQQpynafvhlQI8L9gxgDiXUwOo6upqqNVqBAUFQSKxLMwnFosRGBiI8vJyKBQK+Pr6Wr1OWVn90KXp1JopfXt5eX1eR2lpabPOLywsBFA/xbdgwQKcPSusl7N582Z88MEHVoNAQlwFq6qDfOU/LYb6VXMWYmtdB/zrQoWgvU87CRYm+Dmzi4QQKyJ8RGAZgPujJFtxHQel1Ac+UjkYdf0fPYxaBdTWAD70b7a1ODWAUirrf/Fyue0d3WWy+sTVuro6mwFUXV1dg9fRX6O2trZF59fU1AAAPvnkE0gkEixduhQDBw5EeXk5Vq9ejcOHD+OFF17A1q1bG/xZrly50qJjxDp6zZqB06HL9rUQFeYKmovvH4390s547lg56tfa1QuW8HgrthrXcqqc3FHXRO+15qPXrPkaes1CJHLcVhtTTo5fysVoH3/I1cZR44LMs1C2j3BoH12Ns99ncXFxNo85NYBqyl5aPM8L/muNPo/J1vXMn9vY+ebPU6lUAOoDqbVr1yIhIQEA4Ofnh6VLl2Lu3Ln47bffsH//fiQmJtq8nq0X/sqVKw3+Uogles2agech2/g+JDkXBc3a/kNx84l/4JXvyqHhjXlPMhGQ/lAH3Nuepu4Aeq+1BL1mzdfYaxaTXYLbt9WGx6KQKEg6hAMVtw1tnf19oGtDr7urvc+cmkTu7e0NwBigWKNW179hGsox0h+zdR39NfSjQ42dr2/Xn6f/b1xcnCF40mMYBhMnTgQAnDlzxmYfCWkVPA/p56sg+WmPoFkX0wNnHn8J4/aX47ZJ0jgAfDgkiIInQlyMtZV4XJB5LSiqRt6anBpA+fj4wNvbG1VVVRaFKwFAq9WisrISMpkMfn6253Xbt68vaa/PhTJnnvPU3PODgoIAAOHh4VbP17dXVlZaPU5Iq+B5SL/8GNKD2wXNXLtQnPxrGsYdvoMSpTB4erG3Hx7r4u3MXhJCmsDaSjzzUgZUC6p1OTWAYhgGMTEx0Ol0uH79usXx/Px8cBxnc7Wcnn71XV5ensUxnueRn58PkUhkSPLWn69fjWfu2rVrAIyr9PT/1QdW5vSBmD7QIqTV8TykX62DdL+wnhnnF4gfZ7yFcSc4VKmFU9uzunnj1X6UgEqIK7K6Ei/YbD+8chqBak1OrwOl3+vup59+sjimbxs8eHCLr3H+/HlUVFQgISEBPj4+gvOPHj0KjhP+BV5UVITs7GyEh4cbAq17770XMpkMly5dwo0bNyzuoa9D1adPnwb7SYhTaDWQrV8G6bdfCJo1Xr741/g38NA5Hyi0wuApOd4XHwwOBEtLoAlxSVFm1cgLanRWpvBoBKo1OT2AGj9+PGQyGTZv3iyo5J2VlYUtW7ZAJpMhKSnJ0F5YWIhr164ZVsYBQL9+/RAbG4uMjAxB1fKKigosX74cAATbsnTs2BGDBg1Cfn4+1qxZY2ivq6vDO++8A51Oh2nTphnafX198cgjj4DjOKSmpqKqyrgy6eDBgzhw4ACCgoJoQ2FPpLgD8Y97IP18FeT/fg1eS+bB+x9PwOvNZyBflQrp56sgPrIPTGlRa/e0Xk015O8uhOTYd4Jmrbcfpt27CItuhcB8OcaiPn54e4B/kxZ1EEJah+UIlBZ8kHAEinKgWpfT98KLiIhASkoKVqxYgXnz5mHAgAHgeR6nT5+GTqdDWlqaYH+55ORk3Lp1C6mpqRg/fjyA+lV1S5YsQXJyMpYuXYrdu3cjJCQEZ8+eRXV1NRITEzF06FDBfV966SX87W9/w8aNG3HkyBF06tQJ58+fR2lpKQYPHozJkycLzk9OTkZ2djYyMzMxadIk9OvXD6WlpcjKyoJUKkVqamqDeVrEvTBFBZAc+B8kx/aDUSktTygtAiDcuofrEAFd/L3QDnwQuu69AVZk+TwHYq9fhfyjN8DeKhC018p8Ma7XIhwTCeuUMQDeHOCP53rR+5YQVxdpngOlsFKNnEagWpXTAygASEpKQmhoKLZs2YJz585BIpEgISEBc+bMwX333deka8THx2PDhg1Yu3YtTp8+jZycHERFRWHBggWGVXKmOnbsiE2bNmHNmjU4fvw4CgsLERERgSlTpuCJJ56AWCx8Kby9vfHRRx/hyy+/xL59+5CRkQFvb2+MGDECc+fORY8ePezyWpBWplJCtuXfEB/bD6aB0hnWsLdvgr29G5IfdoMLbAftfSOgHTgSXJeejq0OrNVC8u0XkO7aDEYnXIyR5xWKh//0IrK9hbVhIrxZrB4WjGHhtEEwIe4gQMrCX8qg+o/cRZUOuC0PhA/DgvmjDAlbXQFo1ICEVtG2BqaysrJ53xrkrrlaLQt34IjXjKkohfzfr0GUd9mu1+VCwqAdOBLa+/8MLirWrsEUm30Bss9WQZSfbXHsWEB3TI7/O8qkwhGmcdFyfDgkEMFy546QuSv699l89Jo1X1Nes8E7i5FVYfwj6fvx7fHA21MFuwso3tsKvr31FeOextXeZ60yAkVIa2OvZUP+watgrQyBc4HtoB06FlxkDLiQMPC+/mAqy8FWlIC9VQDRpV/B5mRZjP4Yrl1aBOm3X0D67RfgIjpBc/+fob1vBPiwqJYFUzwP0W9nIP1mC0S/Z1o95dPQoXim+zyoWeMWSUESHmkDgjCzmzflOxHihqJ8RIIAqkChq8+DMgmgmIqSNhNAuRoKoEibw2afh9e7Lxn2lNLjwqKgnjgT2vtGAGLhXo18WBSM6zfnAKo6iC79CnHGjxCfPQpGWWf9XjfzIdu+AbLtG8C1C4WuZz/oevYDF90FXGik7aF3lRKiKxfBnDsB7uxxeJXdsnrabYk/FnSbi53tBxja/CQMnuvli9GyYvTpHtmEV4QQ4orqV+IZC0AX1Gjra0GZVPBhK0rBWT6VOAEFUKRNYSrLIP8wzSJ40ibcD+UzSwAvn6ZdSOYFXZ/B0PUZDJVaBVHmSUhOHoYo8wQYjcbqU9iyYrBH90FydB8AgGdZ8O0jwPv6AxIJeLEUjOIOuJIiSGoaL9Ka3n4gno+bjVKpPwCgvZzF9DhvPNvLFyFyEa5cKW7az0IIcUnWakFxZrWgGKoF1WoogCJth04L+cdvgq0qFzSrH3oM6ieebvkqOqkMugHDoRswHKhTQHz2Z4gzvofo4i9gdDqbT2M4DkxxIWAW5zTWi0NBvfDP6In4KagnWAZ4qKMMf+3mgzFRckhYmqojxFNYrMSjauQuhQIo0mZI/7fBIodIPX461I89ab+bePlAO2Q0tENGAzVVEP9yBOJffoQo+7zNkammUDFi7G3XByuiH0FFZHcMj5BhXrgMQ8NlCJI5vZwbIcQJoiz2w9OBb0cjUK6CAijSJoh+PW5RqVvbsx/Uk+c67qa+AdA+OAHaBycAahVEVy6C/+0MSrN+h6QoH+F11vdmBAAtWOTLQ/BjYE/8HNEPfHx/DOwUiA3hMosKxYQQzxRp9m+9sEYHPs5sOxcagWo19ElMPF9dLWQb3hU0cYEhUD2zxGnFL3ViKb6Q9sA/mY4o6PQw0Anw0SrRRVkMb50ack4NOaeBQiTDbd8OiO0UhmEdvTE8QobHA8W0io6QNijMi4WYAfQ7MZWpONT6t4OXyTlUjbz1UABFPJ5079b6gnN/4FkWyuRU8P7O2Qz6uwIlUn+pwuWq/2fvzsObqtI/gH/vvUnTpvtOd1qWQlnKLmVRwGXkJyMoKIIiIChqwboMwjDsKgIC47hSQEBQFFxYZAQRlR1bFttSCnQvLZSW7nvaJPf3RydJ703TjfS2Td/P88wznnNPbk9D0rw5y3uEaQ/KZdaIswsAAHjasPg/f2uM97PB/V4KWMsoYCKks+NYBt62HG6WGdZS3pQ7w7VOG6YoD9BqAZam8qVGARSxaExhHuRH9wnqah6bDm3P/q3+s4tUWiyKKsLeFBMpDhjgYV9rzA5W4iEfa8hoATghRMRXFEBl1sgxwNYeTHkpAIDRaMCUFIJ3cjV1C9JKKIAiFs3qx+1gqg15VLQOzqh+bHoDjzCPX7Oq8NrZQmRXGGdokbPA7GBbvNbXzmiNAyGE1OVrxwl26maVa6B1dgf3vwAKqP2iSAGU9OivN7FYbFYqZKePCuqqJ80CbJSt9jM1Wh4rLpbgk6tlxv1hgKndlFg8wB4B9vTWI4Q0zt9W+Lfipi6VQVaqvo4pvAsEBkvdtU6P/ooTi2W1N1J/6CYAaL38oH7gsVb7eSXVWsw9WYBjWSqjayFOMnw22hkD3OjQT0JI0xnnglKDFyfTpJ14bYICKGKR2MQrkMVFCepUT88DZK3zkk8vVWPa8XxcKxIuFGcZ4PV+dlg0wAEKjtY4EUKap75s5OJkmizlgmoTFEARiyQ/9oOgrOnZH5qBI1vlZ10pqMETv+Qhr0q43slLyWLXWFcM9aBRJ0JIy/iJRqAyyzTQulMyzfaAAihicZiCXMgunRLUVU+aCbRCLqUrBTWYeDQPBSph8DTQTY49D7rCSylNnilCiGXyEY1A3a7QQOMkOs6liKbw2gIljiAWR/77ITBaQ0Cj8e4KTcggs/+ceBPB06SuNvjveDcKnggh98xOzsJZYfjyV6MF8myFO+5oCq9tUABFLEu1CrIThwVVNQ89YfbRJ1PB0yshttg+xhlKGb21CCHm4SfaiZchdxKUmcK7AM9L2SUCCqCIhZFFnwBbWqQv80pbqEc+bNafcbNMjSeP5SG/nuBpzTBHsHTsCiHEjMQ78dI1SvBWCn2ZUVUBFcapU0jrogCKWA6eh/z4j4KqmlHjAWvz5X0qrtbimV/zkVtZf/BEZ9YRQszNaCdehdZ4Jx6lMpAcBVDEYrApCeDSbujLPMOg5qFJZru/WsvjhRMFSBClKpjXm4InQkjrqXcnnrM4FxStg5IaBVDEYsj/OCQoa/rfB97T1yz35nkeC/8swm+3hEkyJ3a1xvv3UfBECGk94jVQmfXkgqJkmtKjAIpYhmoVZBdPC6pqHjTf6NPWa+XYcaNCUDfYTY7No11ozRMhpFWJ10Bl1peNnHbiSY4CKGIRuNg/wVQZAhytozM0/Yaa5d5/5VXjXxeKBXV+dhy+ecgVNjIKngghrcuv3mzkwgCKUhlIjwIoYhHkf/4mKKuHjQXYe8/DVKTSYtYfBaips2bcXs5g30Ou8LChPE+EkNbnbsPCqs6ndXE1j3IH8RQeBVBSowCKdHwVZeBizwuq1MMfvOfb8jyP+WcKkVGmEdR/MsoZvZ3l93x/QghpCpZhjDOS24gCqPwcKbtEQAEUsQCyy2fA1NToy1p3L2i7hdzzfSOvlePwzSpB3Yu9bTGxq80935sQQprDz064kDzdykVQZvNzKJmmxCiAIh2e7Lxo+m74g/eceTy+oAbLROueBrjK8e5Qx3u6LyGEtIQ4F1QqbwdebjionKmqpGSaEqMAinRoTHEBuIRLgjr18HH3dM8aLY9XTxcK1j05yBnsHOsCBUeLxgkh0jPaiVeuAe/qKahj83Ol7FKnRwEU6dBk0SeEBwf7BkLrG3RP9/x3XCniCmoEdR+NdEZXe5mJRxBCSOuqbyee1tVDUMcUUAAlJQqgSIcm+/N3QVk9/KF7ul98QQ0+iC0V1D0ZaINJgbTuiRDSdsTZyLPqGYFiaARKUhRAkQ6LKcoHlxwvqLuX6bv6pu7crVl8MJzWPRFC2pZ4DVRmmQZaF+EIFEs78SRFARTpsLgYYeoCTWAweHevFt/vw3qm7jaGOcHVmvI9EULalo/oOJfbFRpoxOfh0RSepCiAIh2WTBRAqQeMaPG90kvV2BBnPHX3OKUsIIS0AzYyBu7Who9sLQ/ctRPmgqIRKGlRAEU6pmoVuKsXBVWagS0PoBZHFUNVJ1+mG03dEULaGaOdeApxMk0agZISBVCkQ+ISLoOpVunLWhd3aP27t+hev2RW4WimMGHm6iEONHVHCGlXxDvxUuTCZJpM4V1AKzw5gbQeCqBIhySLOScoawaMaFHyzCo1j0VRRYK6+zys8Ex35T31jxBCzE08ApVRLYPW3klfZrRaMEX5Uner06IAinQ8PG+0gLyl658+ii9FeqnhGxvLAB8MdwR7j5nMCSHE3HxFC8kzy9TgxbmgaBpPMhRAkQ6HzUgCW5inL/MKa2h6D2j2fW6WqbFJtHB8TrAt+rtamXgEIYS0HaNcUGX1ZSOnheRSoQCKdDjcX6Lpuz5DACtFs+/z7uUSVIkWjv9rkMO9do8QQlqFeA1UZrlxLigagZIOBVCkwxGvf1K3YPfdlYIafJdSKahbPtgBTgp6SxBC2id/8Rqo0voCKBqBkgp9WpAOhSnMA5eeqC/zDANN6PBm32f1xWLwdcohTjI8SwvHCSHtmLOChYPcsD6zUsOjyF6YTJMOFJYOBVCkQ+HiogRlbVBv8I4uJlrX73S2Cr/eUgnqVgxxBMfSwnFCSPvFMAz8RYeaZ9m4CtsU0AiUVCiAIh2KOHmmuv99zXo8z/NYebFYUBfmaYVHfJu/hooQQqTWVTSNlyQTBlBs/l0pu9OpyRpv0jqio6OxY8cOJCcnQ61Wo1evXnj++ecRFhbW5HtkZGRg69atiImJQXFxMfz8/DBp0iRMmTIFLGscG969exfbtm1DVFQU8vPz4enpifHjx2PGjBmwsmp859XOnTvx2WefYe7cuXjppZea9fsSM9BqIbt6SVCl6TukWbc4lFGFS3nC8+5WDXEAQ2kLCCEdQIBoBOoGbweek4HRqAEATHkJUFUBWNOShNbWJiNQhw8fxvz583HlyhX06dMHffv2RWxsLCIiIrB///4m3SMxMRGzZs3CsWPH4OXlhbCwMOTk5GDDhg1YuXKlUfucnBzMnj0b+/fvh729PUaOHIny8nJERkYiIiICarW6wZ+XlJSErVu3tuTXJWbCZiSBKSvRl3mlHbSBwU1+vEbL493LJYK6x/ytMcyDRp8IIR1DV3vhCFRaOQ/eRXyoMI1CSUHyEai8vDysXbsWdnZ22Lp1K7p16wYASEhIQHh4ODZt2oSRI0fCw8PD5D14nsfKlStRXl6OVatWYfz48QCAwsJChIeH4+jRoxgzZgzGjRunf8z69euRm5uLefPmYc6cOQCAyspKLFy4ENHR0di7dy+effbZen9eTU0NVqxYgZqamnqvE2kYnX0XMgjgmv4SPpBeiaRiQ6DMMrU77wghpKMIsBP+zcso/V8yzbvZ+jo2Pwca7wCpu9bpSD4CtW/fPlRXV2PatGn64AkAQkJCMGPGDKhUKhw4cKDBe0RFRSE5ORmDBw/WB08A4OzsjEWLFgEA9u7dq6/PyMjAmTNn4Ovri9mzZ+vrbWxssHTpUnAch3379pn8eZs3b0ZycjIGDGh+skZiPpxo+k7dZ3CTH6vleWyMFSbNfKabEsFOcrP0jRBCpCAegUov1UDrIkymSbmgpCF5AHX+fO0RHA888IDRtTFjxgAAzp07Z3StqfcIDQ2Fi4sLYmNjUV5eDgD4888/wfM8Ro0aZbQ2qkuXLggODkZ2djZSU1ON7hcbG4uvv/4akyZNwn33NW/BMjEfpkYFLvGKoE7Td2iTH//zzSokFAlHn97sb2e2/hFCiBT8RSNQtys0UItyQVE2cmlIGkDxPI+0tDSwLIvAwECj6/7+/mBZFqmpqeB5vp471NIFOkFBQfVe9/f3h1arRVpamqB93RGvugICaoc6U1JSBPWVlZVYtWoVPD09ERER0chvR1qT3c0kMGrDFKrW3Ru8h3eTHsvzPDaIRp+eDLRBd0cafSKEdCzWMgZeSsNHt5YH8u3cBG1oBEoakgZQJSUlqK6uhqOjI+Ry4w8vmUwGJycnVFVV6UeP6pOfX3vatJubW73XdfUFBQUAatddNae9zocffohbt25h+fLlsLW1behXI63MIfWqoKzp2/Tpu99uqRCTL1y/9mZ/e7P0ixBCpCZeB5VlLQqgCiiAkoKkAVRVVRUAwNra2mQbhaJ2R1RlZaXJNrprpu6ju0dFRUWL2gO104j79+/H1KlTMXhw0z+sSeuwT70mKKubOH3H8zw+EI0+TfC3RogzjT4RQjqmANE6qGS5OBcUTeFJQdJdeE3JtaObumtoCk+3jsnU/cSPbay9+HHFxcV499134e/vj1dffbXRPpuSlJTUomtESFZahH53b+nLPMMgSeEITROew0tFLKJyhYHz0y6FSEoqMPEIy0Kvs5ah56356DlrvpY+Z/bVcgCGL4HnSoDn6jbIy0FS4g2Asbxc2VK/znr06GHymqQBlFJZm9hLpVKZbFNdXQ2gdoecKbprpu6ju4duxKmx9rp6Xbv169ejsLAQ69ata3C0rDGmnvikpKQG/1GIkOzML4KyNqgXgvqFNumxS47lATD8uz/so8DjA33M2b12i15nLUPPW/PRc9Z89/KcDUI5kFmkL+faeIK3dahNogmA1WrQ080ZvIvpdEAdUXt7nUkaQNna2kKpVKK4uBhqtRoymfDHq9VqFBUVQaFQwN7e9BoVd3d3JCYmIj8/H127djW6Ll7z5O5em2RMt3aqofYJCQn49ddf4eLigu+++w7fffedvp1ukfmJEyeQlZWFgQMH4oknnmjib09aSpy+oKm7724U1RidefdWKK19IoR0bOJs5Bllamg9vMClGRIFM7nZFhdAtTeST+EFBgbi6tWruHnzptEuuoyMDGi1WpO75XSCgoJw9uxZpKWlGa1P4nkeGRkZ4DhOv9NP93PqS1MAAOnp6QBqd+kVFhYCqF1QfvTo0XrbJycnIzk5GRzHUQDV2nge3PUYQZU6ZFCTHhqZINyIMMRdjuGelHWcENKxdRUFUOmlamjdvMCl3dDXsXnZ0KJpI/WkZSSfINWddXfy5Emja7q6ESNGtPgecXFxKCwsRGhoqH7nnK796dOnodVqBe3v3LmDxMREeHl5ISgoCIMHD0Z0dHS9/5s3bx4AYO7cuYiOjsaKFSua86uTFmDuZoOts6OEl1tBG9S70ccVqrT4JrlCUPdqCOV9IoR0fF5KFlZ1Pr0LVTyqXLsI2rC52SCtS/IAasKECVAoFNi1axeuXTPsrEpISMDu3buhUCgwZcoUfX1WVhbS09NRVlamrxs0aBCCgoIQFRUlyFquW7cEQHAsi4+PD8LCwpCRkYHIyEh9fWVlJd577z1oNBpMnz69VX5fcm+467GCsqZ7H8Cq8VGknTfKUakxbCbwUXL4e1fT6+oIIaSjYBnGKKFmrp1wuo65SwFUa5P8LDxvb29ERERg/fr1mDNnDoYOHQqe53Hx4kVoNBqsXLkSLi4u+vbh4eHIzs7G8uXLMWHCBAC1u+qWLVuG8PBwrFmzBocOHYKbmxsuX76MkpISTJo0CaNHjxb83Lfffhtz587Fjh07cOrUKQQEBCAuLg55eXkYMWIEJk+eLOnzQJpGPH2n6dX4cTo1Wh5br5UJ6l7sbQs52/guUEII6Qi62nNILjGcrpCh9ETdxS/s3dvSd6qTkTyAAoApU6bA09MTu3fvRkxMVIlijAAAIABJREFUDORyOUJDQzF79mwMGzasSffo06cPtm/fji1btuDixYtISUmBn58fXn31VUycONGovY+PD3bu3InIyEicO3cOWVlZ8Pb2xtSpU/HMM88YLWgn7UA96580vRqf0z+UXonbFYapWqWMwcxgSoRKCLEctQvJDZtkEq3cMK7OdebuHcn71Nm0WdQwevRoo1Gi+hw8eNDktaCgIKxdu7bJP9PT0xPLly9vcnuxOXPmYM6cOS1+PGkeJu+OICEcL5c3uv6J53l8dlU4+jStuxLOCsvLh0II6by62gmTaV5hXMAzLBi+9ssjW5QHVKuatOSBtAx9qpB2i7smGn3q1vj6p8t5NbiUJzy25eUQGn0ihFgWf9FOvNQKBryLu6COyaNRqNZEARRpt7gbzV//tOOGMHXBwz4K9KBDgwkhFqar6DiX9DINtO5egjqWpvFaFQVQpN0yWv/Uu+EAqrhaix/ThGcozulNo0+EEMsjPlD4ZpkaWndRKgNaSN6qKIAi7RJzNxtsnmH9k5aTNbr+aV9KBSrUwtQFD/u0/CgeQghpr5wULJysDDuLVRqgxEk4AkWpDFoXBVCkXRKPPpX7BDW4/onneaPpuxk9leAodQEhxEKJj3TJthXmgmIpgGpVFECRdkkcQJUFBDfY/sLdaiQUGnKisAwwoydN3xFCLJd4HVSqDSXTlBIFUKRdEmcgbyyA2nFDeGzL33yt4WPLmWhNCCEdX1fROqh4zk1QZu9mAzwP0joogCLtTu36J8PuEV4uR7lvkMn2RSot9qcJA6jZlDiTEGLhujkKA6hYtR34OksdmMpyoLxU6m51GhRAkXaHuyEcfdIGhYCXmU5FsDelAlUaQ9nXlsODPpQ8jhBi2bo7CAOo5BINtG7iVAa0E6+1UABF2h2jBJoN5H/ieR67EoWLx2fS4nFCSCfQXTQClVKiBu8u3olHuaBaCwVQpN1pTv6nuIIaXBUtHn+OFo8TQjoBd2sW9nLDl8VyNY8yZ8oFJRUKoEi7wuTdEa5/ksmh6RZisv03ycK1Tw/5KOClpMXjhBDLxzAMuomm8bLtKJWBVCiAIu2KePedNqi3yfxP1Roe36UIM49P665stb4RQkh7I57GS7MWnYeXSwFUa6EAirQrzZm++zWrCvkqrb7saMVgvJ9Nq/WNEELaG/EIVLxMGECxeRRAtRYKoEi7YhRANbCAfI9o+m5yoBLWMlo8TgjpPMQ78S7AVVBm8nIArQbE/CiAIu0Gk58jmK9vaP1TXpUGv2RWCeqm96DpO0JI5yKewrtaKYfW3klfZjRqMIV5UnerU6AAirQb9a5/UtR/GPD3qZWoc24wejjKMNjNdK4oQgixREGiEai0UjW07qKdeLm0E681UABF2g3j6btQk23Fu++mdVeCYWj6jhDSuThasXC3NnyU12iBMmdRLqicW1J3q1OgAIq0G01NoHm1oAax+TX6MgNgajeaviOEdE7iabxsR29Bmc2+KWV3Og0KoEi7ULv+yTDMzHMyaLr3qbftd6nC0acx3go6OJgQ0mmJd+Kl2IoCqDuZUnan06AAirQLRuufutW//onnefyQJsz9RKNPhJDOTLwTL85KtAYqmwKo1kABFGkXjNY/Bde//ik6txqZZYYtudYc8FhA/QvNCSGkM+gmmsI7zwqzkTN3bwNqNYh5UQBF2oWmJtD8XjT69KifDezl9DImhHRe4hGo+Eo5tM5u+jKj1dYGUcSs6JOHtDkmP1ewzdbU+ie1lscBUQA1OYgyjxNCOrdAexnq7kHOKtNA7eknaEPTeOZHARRpc+LRJ21QL0BhHBidzlbhbpXh6BYHOYOHfWj6jhDSuVnLGPjZGTbS8AAKXXwEbWghuflRAEXaHHdDuIDcVPoC8fTdhAAbOrqFEEJgvBMvy4FSGbQ2CqBIm2vK+XfVWuCnDGEANYWm7wghBIDxOqhEpTCZJo1AmR8FUKRNMQW5YOtkyeU5DpoexuufzhVyKKk2nN3ibs3ifi+FJH0khJD2TrwT77JcmMqAoTVQZkcBFGlTRvmfAnvXu/7pl7vCRJmTutpAxtL0HSGEAMYjUNFaZ/Ayw/mgbGkRUF4qdbcsGgVQpE01JX1BWY0WpwuEARTtviOEEAPxcS6JpTy0HrSQvDVRAEXalHgEqr71Tz/frIJKaxht8rXlMMzDqtX7RgghHYWfLQerOp/od6u0UHn4CtpQKgPzogCKtBmm4C7YnCx92dT6px9EZ99NDrQBy9D0HSGE6HAsgx6iUag7TjQC1ZoogCJtRpy+QBtonP+poEqD326pBHU0fUcIIcb6OMsF5STxTjxKZWBWFECRNsNdazx9waGMKqgNm+/Q01GGfi5yo3aEENLZ9RYFUJflnoIyQyNQZkUBFGkz3LXLgrKml/EBwt+Lp++CbMDQ9B0hhBgJEQVQJyEMoNicLECrATEPCqBIm2Dy7hiff9ezn6DN7XINzt6pFtRNCVRK0j9CCOloejuLUhlUWENr56AvMzU1YPJzpe6WxaIAirQJ7tpfgrK2W4jR+qf96ZWoM3uHAa5yo2RxhBBCavnZcrCXG0boS2p4VHmIDhWmaTyzoQCKtAkuQRhAaUIGGrUx2n1Hi8cJIcQkhmHQ20k4jZcr3olHqQzMhgIoIj2eN1r/pO49SFBOLVHjcl6NvsyAx5M0fUcIIQ0KEU3jpdjSTrzWQgEUkRyTkwW2ME9f5q0U0HbrLWgjHn0a4KCFj60wGzkhhBAh8U68GIUogMpKk7I7Fo0CKCI5LkG0+65HP0AuzCz+Y1qloPw3d9o5QgghjRHvxPuNE2Ujz0oBeB7k3lEARSTX2PqnqwU1uFak1pdlDPCgmxqEEEIaJp7CO1HtBN7GVl9mKsrB5OdI3S2LRAEUkZZWC5k4/5No/dMPacLpu7HeCjhR7kxCCGmUqzUHTxvDR3s1z6DMK1DQhr2ZInW3LBIFUERSbFYqmLISfZm3sYW2aw9DmefxQ6pw+u7JIFo8TgghTSWexrvtGiAos5kUQJlDmyXViY6Oxo4dO5CcnAy1Wo1evXrh+eefR1hYWJPvkZGRga1btyImJgbFxcXw8/PDpEmTMGXKFLCscWx49+5dbNu2DVFRUcjPz4enpyfGjx+PGTNmwMrKyqh9amoqvvzyS1y6dAkFBQWws7ND//79MXPmTPTr18+oPWmc0fRdcCjAGV6GF+/WIKPMsN7JmgMe87dGToZkXSSEkA6tt7MMf9w2nCF61T4AwXWuc5kpqDF+GGmmNhmBOnz4MObPn48rV66gT58+6Nu3L2JjYxEREYH9+/c36R6JiYmYNWsWjh07Bi8vL4SFhSEnJwcbNmzAypUrjdrn5ORg9uzZ2L9/P+zt7TFy5EiUl5cjMjISERERUKuFa2wuXbqEmTNn4siRI7C1tcXIkSPh7u6OU6dO4aWXXsKvv/5qjqei0zE6vkW0/kl8dMsjvtZwsKKBUkIIaSrxCNR5hSiZJk3hmYXkI1B5eXlYu3Yt7OzssHXrVnTr1g0AkJCQgPDwcGzatAkjR46Eh4eHyXvwPI+VK1eivLwcq1atwvjx4wEAhYWFCA8Px9GjRzFmzBiMGzdO/5j169cjNzcX8+bNw5w5cwAAlZWVWLhwIaKjo7F37148++yzAAC1Wo1Vq1ZBpVLhH//4B55++mn9fY4ePYoVK1ZgzZo1GDp0KJycnMz+HFkstRrc9VhBVd31TxotjwPpwum7yTR9RwghzRIiWjT6K7zAMwyY/+2+Y3JvAapKo9MfSPNI/tV+3759qK6uxrRp0/TBEwCEhIRgxowZUKlUOHDgQIP3iIqKQnJyMgYPHqwPngDA2dkZixYtAgDs3btXX5+RkYEzZ87A19cXs2fP1tfb2Nhg6dKl4DgO+/bt09dfuHABd+7cwYABAwTBEwA8+uijuP/++1FeXo4zZ8607EnopNiUBDBVhhEmrb0TtL6GxY1n7lQjp1KrL9vLGTziay1pHwkhpKMLdpKh7pHrVyvl0Lh768sMz1M+KDOQPIA6f/48AOCBBx4wujZmzBgAwLlz51p8j9DQULi4uCA2Nhbl5eUAgD///BM8z2PUqFFGa6O6dOmC4OBgZGdnIzU1FQBQVVWF3r17m1yP5e/vD6B2NI00nexKtKCs6TsEqPPvId5995i/NWxkDAghhDSdrZxFV3tD4mEeQKGnaCdeZqrEvbI8kgZQPM8jLS0NLMsiMDDQ6Lq/vz9YlkVqair4BhJ96QKdoKCgeq/7+/tDq9UiLS1N0L7uiFddAQG1OxRSUmrnhceOHYsvv/xSMFpVV0JCAgA0OM1IjHHxFwRlTb9h+v+u1vA4RNN3hBBiFuJ1UOnOop14N5Ol7I5FkjSAKikpQXV1NRwdHSGXGyf2kclkcHJyQlVVlX70qD75+fkAADc3t3qv6+oLCgoAGEaKmtq+IRcuXMClS5egUCgwYsSIRtuT/yktApueKKjS9B2i/+/fblWhqNoQNLsoWIzxVkjWPUIIsSTiI13+svUXlDkagbpnki4ir6qqAgBYW5te16JQ1H5oVlZWws7Ort42lZWVDd5Hd4+KiooWtTfl9u3bWLFiBQBg1qxZjS4gT0pKatE1S+QcHwW7OqOKFZ5+SMzNB3Jrg+GdN6xQ9+U41lmF9BThN6TO9pyZAz1nLUPPW/PRc9Z8rfmcuak4AIYvoT9Vu+GlOtf5jCQkJSYCTMdaJiH166xHjx4mr0kaQDFN+IfSTd01NIWnW8dk6n7ixzbW3tTj6srKykJ4eDjy8vIwcuRIk9N7dZl64pOSkhr8R7FEihPfC8qyIaP0z0F5jRan/7yD2pn6Wi8M9EKPLoY3f2d8zu4VPWctQ89b89Fz1nyt/ZxZe6mx+LrhyJYTfBfw1kr9Rh6ZqhI9XRzAu3VptT6YW3t7nUk6hadU1q5pUalUJttUV1cDqN0hZ4rumqn76O6hG3FqrL2u3tTPTEhIwNy5c5GdnY3hw4dj7dq19SbqJCbwPLj4i4KquuufjmZWoUJtCJ68lSzCPI0TmxJCCGkaX1vhkS6VWqCUjnQxK0mjAFtbWyiVShQXFxslrgRq8y8VFRVBoVDA3t7e5H3c3d0BGNZCiYnXPDW3fV2nTp3Cyy+/jIKCAjz88MPYuHGjfsqPNA2bmQq2yPDc8wpraHr01Zd/SBMuHn8iUAm2gw0rE0JIe8IwDAa5Cb+Ipjt3FZTpSJd7I2kAxTAMAgMDodFocPPmTaPrGRkZ0Gq1JnfL6eh23+l22dXF8zwyMjLAcZx+p5+uvW43nlh6ejoA4116P/30ExYtWoSqqipMnz4d7777br2L30nDOHH6gt4DAVnt81ik0uJ4VpXg+pQgSu5GCCH3aoi7MIC6pBRmJOcogLonks9D6XIrnTx50uiarq6x3W0N3SMuLg6FhYUIDQ2Fra2toP3p06eh1WoF7e/cuYPExER4eXkJ0iKcOHEC7733HrRaLSIiIvD66683aQ0XMdZQ+oKfMipRXeefJMiewwBXClIJIeReDXYX/i09zvoIyjSFd28kD6AmTJgAhUKBXbt24dq1a/r6hIQE7N69GwqFAlOmTNHXZ2VlIT09HWVlZfq6QYMGISgoCFFRUYKs5YWFhVi3bh0A6I9lAQAfHx+EhYUhIyMDkZGR+vrKykq899570Gg0mD59ur4+Ly8P77zzDrRaLV599VXBvUgzqSrBJV4RVKn7DdX/t3j6bnKQkgJVQggxg4FuVoKM5Id5b/B1/r6yOVlAean0HbMQkp+F5+3tjYiICKxfvx5z5szB0KFDwfM8Ll68CI1Gg5UrV8LFxUXfPjw8HNnZ2Vi+fDkmTJgAoHZX3bJlyxAeHo41a9bg0KFDcHNzw+XLl1FSUoJJkyZh9OjRgp/79ttvY+7cudixYwdOnTqFgIAAxMXFIS8vDyNGjMDkyZP1bb/99luUlpZCJpMhOTkZy5cvr/d3GTt2LMaOHdsKz5Ll4K79BUZtOPdb6+4N3tMXAJBTocGpbOHC/sk0fUcIIWbhaMWip6MMN4pr1xyXc9Yo9ewKhzuG5S9cSgI0/e9rqy52aJIHUAAwZcoUeHp6Yvfu3YiJiYFcLkdoaChmz56NYcOGNX4DAH369MH27duxZcsWXLx4ESkpKfDz88Orr76KiRMnGrX38fHBzp07ERkZiXPnziErKwve3t6YOnUqnnnmGchkhqfi8uXLAGoXtf/yyy8m++Dr60sBVCNkl88Kyur+hn/fA+mV0NbJHNHHWYZeTjR9Rwgh5jLI3UofQAFAkkcwBtcNoJKvUgDVQm0SQAHA6NGjjUaJ6nPw4EGT14KCgrB27dom/0xPT0+To0l1bd++vcn3JA3QasHFCM811Aw0rG/7LlWYuHQKHd1CCCFmNcRdjm/q5CQ+bd8dg+tcZ5PiJe+TpaBkRqTVsKnXwBYX6su8jW3tDjwAN4pqcPFujaD9k4E0fUcIIeY0WJTK4AeZ8AxZLvUaoNVI2SWLQQEUaTWyy2cEZXX/Yfr0Bd8kC0efRnexQoB9mw2IEkKIRerjIoeCM5TPwwNqO0d9mamqBJtlnBKINI4CKNJqxOufNANH1f6/lsfeFGEANb2HrWT9IoSQzkLOMgh1qTMKxTDI9uktaMMmXZW4V5aBAijSKpg7mWCzDclSeY7TLyD/47YK2RWG5E92MgaPB5g+YJoQQkjLifNBxbkIz5PjkimAagkKoEirMBp96jUAsK09nmePaPpuYqANbOX0UiSEkNYgzkh+1Ka7oMwl00LylqBPLdIqxOufNANHAqg9uuW/N4XJM6d3p913hBDSWgaLAqjveH/wnGFhFJt7G0xxgdTd6vAogCJmx5QUghUNCasH1QZQP6ZVQlVnw0dXew5hnsI3NyGEEPMJsOPgqjB83OfxVijzFo5Cif9mk8ZRAEXMjos5D4Y3ZMjUBPQA7+oJANiTXC5oO627Eiwd3UIIIa2GYRjcJ/qiet29p6DMJSdI2SWLQAEUMTvZBeEhz+r/Td/Vl/vpmW40fUcIIa1trLdCUP6F1kHdMwqgiFkxJYXg4i8I6jSDazPO77ghHH2i3E+EECKNcd7Cnc67ECgos2nXAbXwCy5pGAVQxKxkUX+A0RpSFGh8A6H174byGq3R7rsZPSn3EyGESCHIgYOfnWHheKrcFZWObvoyU1MDNj2xLbrWYVEARcxK9udvgrJ6+EMAgB/SKlFSbVgX5WbNYmJXOrqFEEKkwDAMxomm8a659xKUufiLUnapw6MAipgNk3vbKCGbevg48DyPrdeE03czeiih4GjxOCGESGWcj3Aa74B9X0FZFvenlN3p8CiAImYjHn3S9OgL3t0LF+/W4EqBYW6dATArmKbvCCFESvd7KVD3a+sOa2EAxaZeB0qKpO1UB0YBFDEPnof8/HFBVU3YwwCAbdfLBPWP+FnT4nFCCJGYs4LFIDfDsS7ZCmfkdemmLzM8D9mV6LboWodEARQxC/ZmMtjbGfoyz3FQD3sA+VUaHEgXZh6f24tGnwghpC2MFU3jnfYcKChzFEA1GQVQxCxkotEnTd+hgL0Tvk6qEGQeD7Dj8KCPAoQQQqQnXki+00a8Dioa0GpAGkcBFLl3ajVk50W778IehlrLY9t14eLxF3rZUuZxQghpI0M9rGAnM/wNPmoVBLXSXl9myktq10KRRlEARe4Z99cZsEV5+jKvsIZ60Aj8kFaJm2WGbzJWLPBcD8o8TgghbUXOMhjlZRiF0rAcEv2F03iyWNqN1xQUQJF7Jj9+QFBWj3gYWitrfBhXKqif3l0JV2sOhBBC2o54Gu+gY39BmYuLkrI7HRYFUOSesFlpkF2PEdTVPPgEfsmswrUitaEdA0T0sxc/nBBCiMQeFC0k/5gLEZS59EQwRflSdqlDogCK3BPZ7wcFZU3P/tD4BuLfccLUBU90tUGgA6UuIISQttbNUYYBroZ0BrlWjrjdpYegDe3GaxwFUKTlKsshP/uLoKrmoUk4m1ON6LvVgvrX+9PoEyGEtBdTuwnXox50ChWUZRdOStmdDokCKNJi8jO/gKky5HjSOrlCPXg0/i1a+/SIrwL9XOTihxNCCGkjk4NsUPc0rS9sRfmg4qLBFOaBmEYBFGkZnodcNH2nHjMBMUU8frulEtS/TmufCCGkXfGw4TC2zmLyGLsA3Hbtqi8zvBYy0QwDEaIAirQIFxdllHm8+oEJWHmpRNBuuIcVRnShxJmEENLeCKbxGAaRHvcLrstPHwV4XuJedRwUQJHm43lY/bhdUKUeNBrHyu1x4rZw9OmtUBp9IoSQ9uj//K1hWyep5mbnEdByhs0+7J1MsEnxbdG1DoECKNJs3OUz4NITBXVVE57FsgvFgrr7vRR4iI5tIYSQdslWzuLvAYaUBvlW9rjoN1TQRn76iNTd6jAogCLNo9XC6scdgir1kPuxo8obN4oNeZ8YAO8OdQBDx7YQQki7Jd6Nt8FplKAsi/4DUAkPhCe1KIAizSK7cBJcVqq+zDMMCibMxJq/hGufpnVXor+rldTdI4QQ0gz3eynQxcYQChx06IcyOxd9mamqpJQGJlAARZpOq4HVgZ2CKvV94/BBvhvyqrT6OqWMwdJBDhJ3jhBCSHNxLIOn64xCaVgOuz2Fo1DyE4el7laHQAEUaTLZuV+FO+8YFgljn8WnV4VZx+f3tYO3LZ15RwghHcG8EDtY1YkGPnYdLbjOJcWDS7gsca/aPwqgSNOUFEHxzWeCquqwhzDzhh2qDYNP8LRh8VpfO4k7RwghpKV8bDnM7GmrLycqvXHarZ+gjdX32yilgQgFUKRJFHs+AVNmWOfEy+X4sMdkxBfUCNqtvc8RdnJ6WRFCSEfyen97wSjUIv8pgutcSgK42D8l7lX7Rp90pFFcbBTk548L6lIfeg7LbgpHmqYE2eCJQOGODkIIIe2fjy2H5+uMQkU7dMdxz8GCNlY/fAFoteKHdloUQJGGVVZAsXOjoKrGrzse5x6Ets5obhcbFh8Md5K4c4QQQszl9X52qDuB8LbfZMF17mYyuIunJO5V+0UBFGmQ4tvPwRbk6ss8w2LpgHm4USbM7/TJKGc4K+jlRAghHZWvnUwwChVnF4BDXYYL2ih+3A6o1eKHdkr0iUdMkv12APITPwnqTgyYiI2l3oK6F4Jt8ZCvNQghhHRsb4hGof7pNxkaxlDBZt+E1f4d9Tyy86EAitSLi78IxVcfCeqKnLzwuN3fBXU9HWVYPZRyPhFCiCXwtZMhop/hDNMbtt7Y5SlMayD/7x5wVy9K3bV2hwIoYoS5nQHrT1eAqbNYUG1ljQd7vIZKznC2nbs1i30Pu9KuO0IIsSCLBthjkJtcX14cNA23Fc76MsPzUESuAVNS2Bbdazfok48IMDm3YLNpMZiKcn0dDwbTer2KWFt/fZ1SxmDfw67oai+r7zaEEEI6KDnLYOv9LrCV1a51zbeyx4xer0ILw9pXtrgAii3vd+pdeRRAET025Rps3gkHezdbUL846BnsdzFsZ2UZ4IsHnDHQjc66I4QQS9TNUYa19znqyyedQ7AmYJKgjexKNBRf/hvQaqTuXrtAARQBAHAx52Gz9g2wpUWC+p1d7sdGv8cEdR8Md8R4fxspu0cIIURiz/VQ4vEAwwahdwKewBnHYEEb+YmfoNj8LqCuET/c4lEA1dlVVcDq609g/eG/wFRXCS7t9hyFl3vOAZjaYVs5C3w2yglzetFRLYQQYukYhsF/Rjqjp2PtUg0Ny2FG71eRKxduHJJH/QHr/ywFVJVt0c0202YLWKKjo7Fjxw4kJydDrVajV69eeP755xEWFtbke2RkZGDr1q2IiYlBcXEx/Pz8MGnSJEyZMgUsaxwb3r17F9u2bUNUVBTy8/Ph6emJ8ePHY8aMGbCyMp6OKi0txc6dO3HixAnk5ubCxcUFY8eOxdy5c2Fn1/GDCC7mPBS7PgSbn2N0ba3/41ga+LQ+eHKwYrB7rCse8FYYtSWEEGKZnBUs/jveDU8cy0d8QQ0yrd0wbsBSHIlbCz9Vgb6dLC4KyiWzoXp2ATSDRrZhj6XTJiNQhw8fxvz583HlyhX06dMHffv2RWxsLCIiIrB///4m3SMxMRGzZs3CsWPH4OXlhbCwMOTk5GDDhg1YuXKlUfucnBzMnj0b+/fvh729PUaOHIny8nJERkYiIiICalFisLKyMsybNw+7d+8Gy7IYOXIkGIbBnj17MGfOHJSVlZnjqZBeTTVkZ4/BZtUrsPn3P42CJw0YzO8xC0uDpuqDJz87Dscec6fgiRBCOiF3Gw6HH3XDUPfanXnXbX3wwMDlSLLxFLRj8+7A5j//gvW//wn2ZkpbdFVSko9A5eXlYe3atbCzs8PWrVvRrVs3AEBCQgLCw8OxadMmjBw5Eh4eHibvwfM8Vq5cifLycqxatQrjx48HABQWFiI8PBxHjx7FmDFjMG7cOP1j1q9fj9zcXMybNw9z5swBAFRWVmLhwoWIjo7G3r178eyzz+rbb968GcnJyZg0aRIWL14MlmWhVqvxzjvv4MiRI/j888+xcOHC1niKzI4pKQR37S9wVy+DizkLtrj+radp1u54peccHHcxnML9dDcbvD/MEa7WnFTdJYQQ0s44KVjs/5sbph3Px+k71bhp7Y4HBq7Az7FrMaD8pqCtLOY8ZDHnofHrBvWIh1EzZgKg7PizNmKSj0Dt27cP1dXVmDZtmj54AoCQkBDMmDEDKpUKBw4caPAeUVFRSE5OxuDBg/XBEwA4Oztj0aJFAIC9e/fq6zMyMnDmzBn4+vpi9uzZ+nobGxssXboUHMdh3759+vrS0lIcPHgQtra2iIiI0E8HymQyLFq0CA4ODjh06BAqK9vPfC9zOwPWHy2D4rNVUGx5H9YfL4fNypehfO1J2C54AtafrYb85OF6gycNGGz0ewyhQ9fqg6eu9hz2P+KKLfe7UPBECCEEdnKQEzyLAAAgAElEQVQW3z/ihrf612Yrz7VyxAMDV+BD3/FQ1xNOcJkpsPp+m8Xu0pM8gDp//jwA4IEHHjC6NmbMGADAuXPnWnyP0NBQuLi4IDY2FuXltbmM/vzzT/A8j1GjRhmtjerSpQuCg4ORnZ2N1NRUAMBff/0FlUqFIUOGwNbWVtBeqVRi6NChUKlUuHz5chN+49bB8zxUGh5FKi1yKjTIzb4L2aXTkEf9AfnZXyC7eApc2nWwxQUN3ueISyiGD34Hi7pNRwVnDQcrBv8Itce5SR4Y60PHsxBCCDFQcAyWDXbE6YkeCPO0QrnMGv/o/hyGDnkPZx16GrU/5BSK4MMV+L+f72L+mUJsiivF10nl+CWzCpfvViO1RI3b5RoUqbSoUvPgeb6en9o+STqFx/M80tLSwLIsAgMDja77+/uDZVmkpqaC53kwDFPPXaAPdIKCguq97u/vj4KCAqSlpaFv37769nVHvOoKCAhAQkICUlJSEBQU1Gj7rl27AgCSk5MxcqR0i+X+GVWEb1MqoNIAlWoedV9mDxfcxZEm3qeEs8bOLg/gc5+HkaT0AlA74vRKiB2e7aGkzOKEEEIa1MtJjp/Hu2FPcgX+c6UMV+CPMQOX4Ym7F/DCnRN4uOAKOPD4qsso5FRqkVNZjXM51Y3elwFgI2NgzTFQcLVl9n+xgEZtDXnMHTCoXaLL/K89wwAXn/Q0GTO0FkkDqJKSElRXV8PZ2Rlyudzoukwmg5OTEwoKClBeXm5yp1t+fj4AwM3Nrd7ruvqCgtrRl7y8PLO2d3V1FbRvrh49erToce/f54T373MycdUHZRhv4poQC+CF//2vo2jpc9aZ0XPWMvS8NR89Z81nCc8ZwzB4toctnu1Rd6bGD8CT0C1w2fG//1kiSYcaqqpq8wxZW5ueGlIoand6NbS+SHfN1H1096ioqGiV9rr69rQGihBCCCHSkTSAasrwmm7+s6F5UN06JlP3Ez+2sfbix9WXQ6q5fSSEEEKI5ZI0gFIqlQAAlUplsk11de0cqY2N6aNCdNdM3Ud3D91IUWPtdfW6ds1tTwghhJDORdIAytbWFkqlEsXFxUaJKwFArVajqKgICoUC9vb2Ju/j7u4OwLAWSky8hsnc7XX1urVQhBBCCOlcJF1EzjAMAgMDcfXqVdy8edNoF11GRga0Wq3J3W86QUFBOHv2LNLS0jB48GDBNZ7nkZGRAY7j9Dv9dD9Ht7tOLD09HYBh153u/9PS0uptr6vv3r17g/3Uqaqqwtdff43ffvsNmZmZYBgGXbt2xWOPPYannnrKaMrw559/rjebus7s2bPxyiuvNOlnd3TmOPLHEmk0Gvzwww/473//i/T0dGi1Wnh7e+ORRx7Bc889p1/XB9Sm5Zg3b57Jez366KNYvXq1FN1uU819XyUkJGDbtm1ISEhAZWUlgoKCMHXqVDz66KMS9LbtDRs2rEntPv/8c/3f4ZycHPz973832TY0NBRbt241S//am8OHD2P16tXYsmULBgwYYHS9tY8e64gae87OnTuHb775BteuXUNFRQXc3NwQFhaGF154AZ6ewizoarUaY8aM0c9AiXl4eODw4cNm7b/kmcjDwsJw9epVnDx50iiAOnnyJABgxIgRjd5j9+7dOHnyJKZMmSK4FhcXh8LCQgwaNEifw0n3YXv69GnMnz9f8GK9c+cOEhMT4eXlpe/PwIEDoVAocOHCBVRWVgqm6ioqKnDhwgUolcp6/8HFKioq8Morr+DatWtwcHDAoEGDUFNTg/j4eGzcuBEXLlzAunXrwHGGZJU3btwAANx3331wdnY2umfPnsa5NiyR7s1lZWWFIUOGQKPR4NKlS4iIiMA///lPPPHEE23dxTah0Wjwj3/8A2fPnoVSqUTfvn0hk8kQHx+PyMhInD17Fp999pl+CjsxMREA0L9/f3h7exvdr3///pL2v600530VFRWFN954AzzPY+DAgbC2tsaFCxewfPlypKam4tVXX5Ws322loUAxKysL8fHxsLW1hY+Pj75e9xx379693i+YAQEB5u9oOxAXF4cNGzaYvJ6YmIh58+ahvLwcoaGhCAkJwaVLl7BhwwbEx8cbfYHJycnBnDlzkJubi+DgYPTq1QuxsbGIjIzExYsX8fHHH0Mma7OjbM2isefsyy+/xKeffgqWZRESEgIXFxckJiZi//79OHHiBCIjI/UphYDagY3q6mr4+vqib9++RvdzcHAwqrtXkv8LTJgwAbt378auXbswfPhw9O7dG0Dtt73du3dDoVAIgqKsrCyo1Wq4ubnp0xoMGjQIQUFBiIqKwoEDBzBp0iQAtUe5rFu3DgAEx7L4+PggLCwM58+fR2RkpP5bZmVlJd577z1oNBpMnz5d397GxgaPPfYYfvzxR6xbtw5Lly6FTCaDWq3G+vXrUVpaiunTpxsl2azPjh07cO3aNQwdOhRr167VT03evn0bCxYswKlTp3Dw4EE8+eST+sfoPvCWLVvW4JE2lswcR/5YqoMHD+Ls2bPo3r07PvzwQ/1zUFRUhLfeegtXrlzBF198gfDwcACGD7UFCxYgNDS0zfrd1pr6vqqqqsKKFSsAAB9//DGGDBkCoPZv0csvv4ydO3di7Nix+r9dlsrUqGRVVRVmzpwJAFi1ahW6dOmiv6Z7rT3//POdZqTujz/+wOrVq/W7uMWkOHqso2nsOUtNTcXmzZuhVCrx0Ucf6b/kqdVqbNq0Cd9//z1Wr16N7du36x+je+1NmDABL7wgTZIeyTMment7IyIiAuXl5ZgzZw4iIiLw2muvYe7cuaioqMCSJUvg4uKibx8eHo6nn34aJ06cMHSaZbFs2TIolUqsWbMGL7zwAt5++2089dRT+vPrRo8eLfi5b7/9NlxdXbFjxw5MmzYNixcvxuTJkxEVFYURI0Zg8uTJgvavvPIKAgIC8PPPP+Opp57C4sWL8dRTT+Hnn39GcHAwXnrppSb9vv/9738BAEuWLBGs6/L29sZrr70GAPj1118Fj0lMTISLi0unDA50zHHkj6XSDUO/+eabgteIk5OT/iijY8eO6etv3LgBlmU7zcilKU19Xx05cgQFBQV49NFH9cETAPj6+mL+/PkAhEdFdTabNm1CWloaJk2ahPvvv19wTfch1qtXr7bomqRycnKwYsUKLFq0CBqNRvC5VVdrHz3WkTT1OTty5Ih+YKPuCLlMJsObb74JZ2dnxMfHIzs7W39N9wVJyi82bZJyesqUKdi4cSP69u2LmJgYJCQkIDQ0FB9//LHgBdaQPn36YPv27Rg3bhxu3ryJqKgodOnSBYsXL9a/KOvy8fHBzp07MWHCBBQWFuLs2bOwt7dHeHg41q1bZzQc6ujoiG3btmHq1KlQq9U4c+YMWJbFjBkz8Pnnn+t3FDakoqICfn5+6NOnj2CYW8ff3x9A7Vy3zq1bt1BaWmrx324bY44jfyyVk5MTunbtij59+hhd072mdBsjampqkJaWhoCAgE69a7Q576uGXnujRo0Cx3H6Np1NQkICDh48CBcXFyxYsMDoemJiIpRKpf51aMk2b96MI0eOoHfv3ti+fbtgOqmu1j56rCNp6nMml8vRvXv3epfJyGQy/VKEup+duuA9ODjY/B03oc0mUUePHm00SlSfgwcPmrwWFBSEtWvXNvlnenp6Yvny5U1u7+joiLfeegtvvfVWkx9Tl1KpRGRkpMnrCQkJACD4RqyLol1cXPDBBx/g/PnzyM3NRZcuXTB+/HijBcKWyFxH/liqTZs2mbwmfk2lpKRArVbD29sbn3/+Of744w9kZ2fDxcUF48aNwwsvvNDgjldL0Zz3VUNHOdnZ2cHNzQ05OTnIz8/vdDtxN27cCJ7n8eKLLxq9boqLi3Hnzh306tULe/bswc8//4zMzEzY29tj1KhRePHFF/U7nC1B165dsWLFCowfP77B3IGtffRYR9LU5+yll14yOctTWVmp38ilW0jO8zwSExPh6uqKU6dO4cCBA0hPT4eVlRWGDRuGF198sVXW39GhZ22kurpaP39bd+5bF0X/9NNP+OWXXxAUFIQ+ffogNzcXkZGRCA8P12d0t1S6I38cHR0bPPKnqqpK/62N1P4R2bJlCwBg7NixAAyvp7Nnz+Lbb7+Fj48PQkNDUVpaiq+//hqzZ89GYWFhm/VZKs15XzX3qKjO4ty5c7hy5Qo8PDwwceJEo+u65/j69ev47LPP4OLiot/8ceDAATz//PPIyMiQututZubMmXjssccaTbzc2kePdSRNfc4asmvXLlRUVCAkJEQfQN26dQvl5eXIz8/H2rVrYWVlhcGDB8PKygrHjh3DrFmzEBsba65fQ69jL+NvA8uWLcP169cbbTdmzBj9Il4xnufx7rvvIjMzE4GBgXj88cf113R/hB566CEsW7ZMP+1y+/ZtLFy4EHFxcdi8eTNef/11M/w27VNzj/wxdWZiZ/PZZ5/h8uXLcHFxwYwZMwAYRl4GDRqE999/X7/7rKioCP/6179w4cIFrF27Vr/5wlI1532lO6LJ1EhvU46bskR79uwBAEyfPr3eHWC611pQUBA2btyoX7ag26xz7NgxLFu2DLt27ZKu0+1Aax891pmcPXsWO3fuBMuygilk3fvbw8MDmzZt0q/3VKvV+PTTT/H111/jX//6F3744QezzuBQANVMd+7cadK3KN23CDGNRoP33nsPR48ehYODA9atWyfI6bF27VrcunULfn5+gtEXb29vrFixAjNmzMCBAwcwf/78Dr+N1RRzHfnTmURGRuLLL7+ElZUV1qxZow+U3njjDTz99NNwc3MT7Bp1cnLCypUrMWXKFJw4cQJ5eXkmv/Fagua8r1iWbXBquDO+9lJTUxEdHQ07OzuT6UOmTZuGsWPHwtbWFk5OhkPPdYufY2JicP36dVy5cgX9+vWTquttrrWPHusszpw5g3/+85/QaDQIDw8X5IAcN24cfvrpJ7AsK5gmlslkWLBgAS5duoTr16/j5MmTeOSRR8zWJ8v8BG5F95IErrKyEkuXLsXp06fh4OCAjz/+2GgRnUKhMDmv3bNnT3h4eCAnJwcZGRmNJhztqMx15E9noFar8cEHH2D//v1QKBRYt24dBg0apL8uk8lMzv27u7sjODhY/8E2atQoqbotuea8r2xsbFBaWgqVSlXvt9XO+No7fvw4gNqpYVO/N8dx9W6WAWpHUwYPHowjR47g+vXrnSqAau2jxzqDQ4cO4f3334dGo8HcuXP1aTR0GIYxSqypw7IsRo4cievXr+P69etmDaBoDZRE8vPzMW/ePJw+fRoeHh6IjIxs0U473aLVhoKLjs5cR/5YuoqKCrz11lvYv38/7O3t8Z///KfRJLRiuteTpa+ra0zd95VuJK6xo5860wLyP/74A0DtFGhLddbXWmsfPWbpNm/ejHfffRdarRZvvPFGk1MI1dVarz0KoCSQnZ2NOXPm4Pr16+jevTu++OKLekePysvLsWbNGixevLjewAGoXbMBwKJ2s4jpjvzRaDS4efOm0fWmHvljyUpKSvDyyy/j/Pnz8PT0xJYtWwQjTzobNmzAwoULTS441b2eLDnnWHPfVw0d5VRWVoa8vDw4Ozt3mgAqJycHKSkpsLOzw9ChQ02227p1KxYvXozk5OR6r3eG11p9dCOf9b2ezHH0mKXSrRXevn07rKys8O6772LatGn1tv3uu++wZMkSREdH13u9tV57FEC1suLiYsyfPx+3b9/GwIEDsWXLFpNDjUqlEidOnMDvv/+Oy5cvG10/f/48ioqK0L17d4sOoADD8Tu6433qauqRP5aqpqYGr7/+Oq5fv47AwEBs27bN5B/TuLg4nDx5EqdPnza6lpKSgsTERDg6Olp03rHmvq8aeu2dOXMGGo2mU7324uPjAdTm3mto3WVycjJ+//13/XRfXQUFBYiKioJMJjM6v9TSNfR60h09FhoaWu/RY1qtVtC+vqPHLNWHH36IQ4cOwdbWFh999BEefvhhk21v3bqF48eP6xNX16VSqfDbb78BqD3GyZwogGpl69evR2ZmJoKDg/Gf//ynwR1jDMPoj6XZuHGjIElYVlaWfqdU3ey0lmrChAlQKBTYtWsXrl27pq83deRPZxIZGYn4+Hh4enpi8+bNJgNyAPoFv59//rn+mytQe4zE6tWrodFoMGPGjHrTRViK5r6vxo4dCxcXFxw+fBhnz57Vt7116xY++eQTMAwjOPrJ0unefyEhIQ22073Wvv76a8GW8YqKCrzzzjsoLy/HxIkTO83Uk4746DGdxo4ey8jIEOQRNHX0mCU6f/48vvnmG3Ach3//+9/1jq7X9fjjj4PjOBw9ehS///67vl6tVmPDhg3Izs7GiBEjzP5FkSkqKupcS/kllJaWhmeeeUZ/IKmpDzonJye8+eabAGrnaBcsWIDY2FgolUr92WWXLl1CdXU1pk+fbtEpDOr6/vvvsX79eshkMgwdOhQ8z+PixYvQaDRYuXJlk7PWW5Li4mJMmDABKpUKvXr1MpnJF6g9y0yr1WLJkiX4/fffIZfLMWDAANjY2ODSpUsoLy/HQw89hHfeeUdwmLUlau776tSpU1i0aBG0Wi0GDRoEpVKJCxcuoKqqCq+88kqn+BKjs2TJEhw/fhxLly4VpFypz4cffog9e/aAZVn0798fTk5OiImJQVFREQYMGICPPvqowfQkHdnLL7+My5cvY8uWLUYZtK9evYrw8HBUVFSgb9++cHNzw+XLl1FSUoJJkyZhyZIlgva3bt3C3LlzkZ+fj27duiEgIABxcXHIy8vDiBEjsGHDBovYhW3qOXvhhRcQHx8PDw+PBoOn2bNn66c+9+7di02bNoHneYSEhKBLly6Ij49Hbm4uunbtis2bN5s8OqalKIBqRT/88EOT8ut4eXkJMq7X1NRgz549OHr0KDIzMyGXyxEcHIypU6fqEyR2FqdPn8bu3btx48YNyOVy9OjRA7Nnz8awYcPaumtt4vz584iIiGhSW916AJ7nsX//fhw8eBCpqalgWRZBQUGYOHEiJk6c2GkyuTf3fRUXF4dt27YhPj4ePM8jMDAQ06dPv6eF1B3RK6+8gkuXLuGjjz7C8OHDG21//Phx7Nu3D4mJidBoNPDz88P48eMxbdo0i/jQN6WhAAqoXdO0ZcsWXLx4ETU1NfDz88OTTz6JiRMn1vsFJicnB5GRkTh37hzKy8vh7e2N//u//8MzzzxjMadR1PecVVVVYcyYMUbTl/X5/PPPBVPC0dHR+Oqrr3D16lWoVCp06dIFDz74IGbOnNmk49eaiwIoQgghhJBmojVQhBBCCCHNRAEUIYQQQkgzUQBFCCGEENJMFEARQgghhDQTBVCEEEIIIc1EARQhhBBCSDNRAEUIIfeI5ykbDCGdjeVmNSOEmN2qVavqPW+qLlMHenY0Z8+exbfffotr166hqqoKbm5uCAsLw6xZswSnCsTGxmLbtm34+OOPW60vxcXF+PLLL3Hy5Enk5ORAoVCgR48emDRpEv72t791mmSohLQnFEARQprF2dm5SRn2O7LDhw9j9erV+Pvf/44nn3wStra2yMjIwNdff40//vgDO3bsgJeXFwDgwIEDSEtLa7W+VFVV4aWXXkJ1dTWeffZZ+Pn5oaKiAmfOnMHy5cuRlJSEBQsWtNrPJ4TUjwIoQkiz6M7Us2RffPEFHnzwQSxbtkxfN2zYMIwaNQqTJ0/GV199hYULF0rSl99//x1paWn49ttvERQUpK8fO3YsOI7Dnj17MH36dLi6ukrSH0JILQqgCCGt4uWXX4avry+CgoKwb98+5OXlITAwEOHh4YIz1XJycvDJJ5/g/PnzUKlUCAkJwfz589GvXz99m2HDhmHevHk4e/YskpKS8NRTT+G1115DXFwcPvnkE1y/fh1OTk547rnncPLkSXh4eGDFihWYOXMmGIbBzp07BX1bsmQJMjMzsXv37nr7XlBQUG+9l5cX/vGPf+gPJdWd5aXro+5srqSkJGzduhUxMTEoLS2Fi4sLxowZgwULFugP0504cSLGjh2L1NRU/PXXXxg9ejTWrFnT5L4AwDPPPANfX19BXWZmJj799FNcvHgRWq0Wffr0wYIFC9CzZ08AgEqlwldffYWjR48iOzsbHh4eePzxxzFjxgz9mWwvv/wyPD09odFocPr0aXTr1g3bt29HdXU1tmzZgl9++QUF/9/e/cdUVf8PHH9+ruCV+CGXS4IIwUAjQX4ErHZpKmUD8lLpMiJuKKQUUJI1x2yx/NTIolaGMLlwZUFK15m5W6auK5ZYDfPCVdfKzGwrnAEWXC4yBAk/fzDPBIG83+8fzXo9tvvHPT/e93XuYdzXXu8fp7ub4OBgcnJyyMjImDRGIf6ppm3YsOG/f3cQQoibQ3NzM+fPnyczM5ORkZHrXoAyHufTTz/FbrfT0dFBfn4+qamp2Gw29uzZw4oVK1Cr1TgcDvLy8ujq6qKoqIi0tDROnTrFe++9h06n49ZbbwXAZDJx8uRJMjIyyMrKIiYmhv7+ftasWYNWq6W4uJioqChMJhPnzp0jPDyclJQU5UHK999/PxqNBgCn08mmTZvIyclhwYIFE17n2bNnaWpq4vTp0wDMnDlTeRjp/PnzCQsLA+COO+7gt99+4+LFi2zZsoXbb78dp9PJypUr8fHxobCwEL1ej5ubG7t27WL69OnK0+V37tyJzWYjKSmJ/Px8FixYQFBQ0HWxeHp6YrFY+OKLLxgYGGD69On4+fmhUqnQaDTExcUpsf3+++/k5OTQ399PUVER6enp2Gw2PvjgA9LT07nllltYt24dVquVzMxMHn/8cdRqNfX19XR0dLB48WLl3rW0tDBnzhyKi4uJjY0lNDSU9evX09TUhMFgICsri6GhIYxGIxqNhqioqP/335cQNxOpQAkhXNLV1UVycvKE+wwGA88995zyfnBwkKqqKmbOnAmAh4cHzz77LDabjfvuuw+z2Ux3dzdms5nbbrsNgIULF2IwGNi6deuYgdmRkZE89dRTyvuNGzfi6elJZWUlHh4eAISHh7NmzRrlmNTUVN59913279/PM888A4DVauXKlSukp6dPeo0bNmzgypUrHDp0iCNHjgAQHByMTqfjscceU2KdO3cuGo1mTLfmt99+S3h4OG+++Sbe3t4A6HQ6WltbsdvtrF69WvkcjUbD+vXrcXOb/F9xREQE5eXllJeXU1tbS21tLWq1mvj4eNLS0njggQeUypHZbGZgYIDGxkZloHtMTAyrVq3Cbrfj4+PDsWPH2LhxI3q9HoDk5GRmzJiByWQiKyuLefPmAaMzC19++WW8vLyA0ckBX3/99Zhz77nnHkZGRqiuriYjI0OprgnxbyAJlBDCJX5+frzzzjsT7hs/DicsLExJngDlR31gYAAAm81GREQEQUFBDA8PK8ctXLgQs9nM5cuXcXd3B0YTiWu1tbWh0+mU5AkgNjZWGdwN4OXlxZIlSzhw4ACFhYWoVCr27t3LokWLxsQ1npeXF6+99hrFxcW0tLTQ1taG3W7nww8/xGKxUFZWxr333jvhuTqdDp1Ox59//skvv/xCe3s7Z86coaenR0lGrv1+pkqerlq0aBHJycmcOHGCY8eOcfz4cVpbW/nmm2/Yu3cvFRUVzJgxg+PHjxMdHT1mlqCvry8ff/wxAJWVlahUKlJTU8e0r9frMZlM2O12JYGaPXv2mHhtNpsSy7X3KiUlBYvFwvfff69U14T4N5AESgjhEjc3txvurhlfkVCpRpeeu7puUm9vL+3t7ZNWtBwOh9KNNz456+npUbrlrjX+uIcffph9+/bR2tqKVqvl1KlTFBQU3FD8AQEBLFu2jGXLlgGjVZhXXnmF8vJyFi9erFzPtUZGRqipqWHXrl309/cTEBBAdHQ0arX6L2OdipubG0lJSSQlJQGj343RaGTPnj188sknZGZm0tvbqyRAE3E6nXh7eytJ6fg4+vr6Jo3N4XAAsGTJkgnb7urquuFrEeKfQBIoIcTfxsvLi7i4OJ5//vkJ9/v6+k567qxZs/jjjz+u297d3U1oaKjyPj4+ntDQUA4ePIhWq2XWrFncfffdk7Z76NAhNm3aRG1t7XVVr7vuuovs7GwqKipwOBzKYPJrNTQ08P777/PSSy+RkpKiVHFyc3Mn/cyp5OXlMWfOHMrKysZs9/X1paSkhM8++0xZRsHLy0tJdK5lt9vRarX4+PjQ19c3prIHo2OnrrY5GW9vb9RqNTU1NRPun2j8lhD/ZLISuRDib5OYmMivv/5KSEgIUVFRyqupqQmz2Txl91ZCQgJHjx7l0qVLyrYffviB8+fPX3fsQw89RHNzM4cPH2bp0qUTVo6umjt3Lv39/ezYsWPC/T///DNarVapfo1v6+TJk4SFhZGRkaEkT52dnZw9e1YZaO+KkJAQmpubJ1xrqqOjg0uXLimJXnx8PN999x0XLlxQjunr6+OFF17AarWSkJDAyMgIVqt1TDsHDhwAIC4ubtI4EhISGBwcZHh4eMy9am9vp7q6esx9EOLfQCpQQgiXXL58mRMnTky6PyIiQhk8/Veys7PZv38/hYWFGAwGNBoNzc3NfPTRRzz99NNTrrCdm5uL1Wpl7dq1GAwGLl68SE1NDSqV6rqkRq/XU11djcPh4K233poyptDQUFauXEl9fT2dnZ0sXbqUwMBAnE4nn3/+OQcPHqSsrEyJzdvbG4fDwZdffklMTAzR0dG0tLRQV1dHTEwM586do6GhgaGhIWXslysKCgpoa2tj9erVPProo8TGxuLu7s6ZM2cwm83MmzdPWUYgOzubffv2sXbtWvLy8vDw8GD79u14eHiwfPlytFotiYmJlJeXc+HCBSIjI7Hb7ezYsYO0tLQpu/+Sk5NJTEykpKSE3NxcwsPDOX36NCaTidjYWAIDA12+NiFuZpJACSFc0lE5OlMAAAH/SURBVNPTM2Y23HgVFRXodLobasvf35+6ujq2bt3K22+/zeDgIMHBwZSUlLBixYopzw0JCWHLli1UVlZSWlqKn58fTz75JNu2bRszsBxGB75HR0ejUqkICQn5y7iKioqYP38+FouFqqoqnE4nnp6exMbGYjQaufPOO5Vjly9fzldffcWLL75IaWkpq1atwuFwsHv3burr6wkMDESv1zNt2jTq6upwOBxTdpWNFxQUxPbt22loaODw4cPs3LmTkZERgoKClPWbro41CwgIYNu2bVRVVfHGG2+gUqmIj4/HaDTi7+8PwObNm6mpqWH37t309PQwe/ZsCgoKeOKJJ6aMQ6VSsXnzZmpra2lsbKS7uxt/f38eeeQR8vPzb/h6hPin+I/D4ZCnYAohbjpHjx7F3d2dxMREZZvT6SQ9PZ1169aRmZmpbO/p6eHBBx+ktLR0yuULhBDiRkkFSghxU/rpp58wGo0UFBQQGRlJb28vZrMZHx8fZZr+jz/+yJEjR2hubkar1U46g0wIIVwlCZQQ4qaUnZ3N0NAQFouFzs5OPDw8SExM5NVXX1W6yIaHh2lsbESr1fL6669fN31fCCH+r6QLTwghhBDCRbKMgRBCCCGEiySBEkIIIYRwkSRQQgghhBAukgRKCCGEEMJFkkAJIYQQQrhIEighhBBCCBf9D1KEDnlgVQCTAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 576x576 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "figsize(8, 8)\n",
    "\n",
    "# Density plot of the final predictions and the test values\n",
    "sns.kdeplot(final_pred, label = 'Predictions')\n",
    "sns.kdeplot(y_test, label = 'Values')\n",
    "\n",
    "# Label the plot\n",
    "plt.xlabel('Energy Star Score'); plt.ylabel('Density');\n",
    "plt.title('Test Values and Predictions');"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "预测值和真实值近乎密度线较拟合。\n",
    "\n",
    "下面的诊断图是残差直方图。理想情况下，我们希望残差是正态分布的，这意味着模型在两个方向（高和低）上都是错误的。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkkAAAIgCAYAAACRe/2mAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjAsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+17YcXAAAgAElEQVR4nOzdeVwV9f7H8TegAuKKCCjigmtqUpIW7pqV/rSktES9puaatNy8qZUbmnrV1BZvKYpGda2sLFMz1LRwRwURl7ogIqUpyCLmEVzg/P7wcU4iA6LCweX1fDx6EDOf+c535qC8nfl+Z+zOnDljFgAAAPKwL+0OAAAA3I4ISQAAAAYISQAAAAYISQAAAAYISQAAAAYISQAAAAYIScAtWrx4sVq3bp3nv4cffljt27dXr169NHnyZB0+fNhw29atWyswMPCm9puamqrvv/++yPXX7mvt2rVq3bq1/vvf/97U/q9n48aN+uOPP6zfR0VFqXXr1nrnnXdKZH8l4eTJk3r55ZfVqVMnderUSR9//HGBtaNGjcr3c2D5WejcubP69u2r999/X2fPni3xfv/5559q3bq1XnvttSLV9+rVSx07dizhXtl+X8CtKlPaHQDuFh06dFCjRo0kSWazWefPn9exY8e0ceNGbdy4UePHj1dAQECebYYNGyZXV9cb3ld6erqeffZZPfDAA+rVq1eRtrnZfd2MBQsW6LPPPlNYWJh1WY0aNTRs2DA1a9bMJn0oDv/+978VGRmpNm3aqGHDhnrggQeuu01gYKAqVKiQZ1lycrJ27typ5cuXa8+ePVq6dKkcHR1LqtuqWLGihg0bptq1a5fYPoB7ASEJKCadOnVSz5498y0/ePCgXnnlFc2ePVs+Pj5q0aKFdd2IESNual/Z2dkymUw3tM3N7utmpKen51tWs2ZNm/ahOMTFxcnFxUXz5s2Tg4NDkbYJDAxUzZo18y03mUwaPny44uLitG7dOj399NPF3V2rihUr3nHnGrgdcbsNKGHNmzfXG2+8oZycHC1atKi0u4MbcPHiRVWqVKnIAakwLi4u6t+/vyRp9+7dt9wegJJHSAJs4LHHHpOnp6f27t2b5yqL0ZikDRs2aPjw4eratas6dOiggQMH6vPPP1dOTo6kK2OJLLfttm/frtatW2vx4sWSroz3GD58uH744Qd169ZNHTp00KxZswrclyTl5uYqLCxMTz31lNq3b6+BAwfqhx9+yFNT2Hii+fPnq3Xr1oqKirL2wbL94MGD1bp160LbSE1N1axZs/Tkk0+qTZs26tGjh95++22dPHkyT51lDNWuXbv0+eefq0+fPmrbtq169eqlRYsW6dKlS4V9BFbnzp3TggUL9Mwzz6ht27Z64okn9OabbyohIcFaYxlndu7cOZ08eVKtW7cu8m3NwlSpUkWS8vXVbDbru+++0/PPP6/27durS5cu+uc//6mDBw/ma+PXX3/VmDFj1KNHD7Vr107PPPOM3n33XWVmZlprChqTlJmZqblz56pnz55q3769RowYoUOHDuXbR2Hj1V5//XW1bt1af/75Z57l69at04svvqiuXbvK399f3bp105tvvqmjR49e97xERkYqKChI3bp1U/v27dW3b18tXrxY2dnZ190WKEncbgNswM7OTi1atNCpU6cUExOjLl26GNatX79ekyZNkre3t/7v//5PDg4O2r59u9577z2dOnVKY8aMUaNGjRQYGKgvv/xS3t7eeuKJJ+Tn52dtIykpSbNmzVK3bt2Um5ur+++/v9C+ffHFFzp37pwef/xxlS1bVr/88oumTp2q06dPa/DgwTd8rIGBgVq7dq3i4+MVEBAgNze3AmuPHz+uYcOGKT09XQ899JAeffRRJSYmas2aNdqyZYsWLVqk+vXr59nmo48+0rFjx/Too4+qXbt2+umnn7Rs2TKdP39eY8aMKbRvZ86c0fDhw5WUlKRmzZqpffv2OnXqlH755Rdt27ZN8+bNU+vWra3n89NPP1W5cuUUGBioihUr3vC5uNaOHTskyTp2zWL69Olas2aN6tWrp4CAAF28eFGbNm3SiBEj9O9//9s60PnYsWMKCgqSnZ2dHn30UVWqVEmHDx/WF198oX379iksLEz29sb/9jWZTBoxYoQSExPVsmVLPfroo4qJidHo0aNlZ2d3S8f1/vvva/ny5WrQoIH+7//+T/b29oqNjdWmTZu0Z88erVy5UpUrVzbcNjo6Wq+99pqqVKmiRx99VI6OjoqOjlZoaKji4+PvqIH+uPsQkgAbcXd3lySdPn26wJrly5fL2dlZn376qVxcXCRJI0eOVGBgoFatWqWXX345T0iqXbt2vrEnZ86c0WuvvaZ+/foVqV9nzpxRaGiodUD1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o8qVK+vxxx/XkCFDrFdQSsqzzz6r8PBwHTp0SB988IEmTZokOzs7zZw5U998843Wrl2r1atXy9HRUXXr1tWYMWPyzIjz8vJSaGioli1bppiYGG3btk2VKlXSo48+qhEjRhQ6KaBs2bJasGCBli1bpvXr12vlypWqX7++3n33XYWGhua77frOO+/oww8/1NatW3XkyBE1adJE77//vvbt25cnJDVq1EjvvfeeFi9erK1bt8rOzk41atTQkCFD1LdvX/Xs2VO7du0qsF/NmjVTSEiIPv74Y0VFRSkjI0PVqlXT008/raFDhxb7GDHgRtidOXOm4JvFAAAA9yjGJAEAABggJAEAABggJAEAABggJAEAABggJAEAABggJAEAABggJAEAABggJBmIj48v7S7cNTiXxYdzWXw4l8WHc1l8OJe3H0ISAACAAUISAACAAUISAACAAUISAACAAUISAACAAUISAACAgTKlteMff/xRX3/9tY4cOSKz2azatWvrySef1LPPPisHB4c8tUlJSVqyZIliYmKUmZkpb29vBQQEqE+fPrK3z5/zTp8+rdDQUEVGRiotLU0eHh7q3r27Bg4cqHLlytnqEAEAwB2sVK4kffDBB5oyZYri4uLk6+srPz8/nThxQvPnz9cbb7whs9lsrY2Li9PgwYO1YcMG1ahRQ/7+/kpOTtbcuXMVHBycr+3k5GQNGTJE3333nSpWrKi2bdvKZDIpJCREr776qi5fvmzDIwUAAHcqm19JOnLkiJYvX66qVatq8eLFqlOnjiQpJSVFw4cPV0REhH7++Wd16dJFZrNZwcHBMplMmjp1qrp37y5JysjIUFBQkMLDw9WpUyd16dLF2v6cOXOUkpKikSNHaujQoZKkrKwsjR07Vrt379aKFSs0YMAAWx82AAC4w9j8SlJkZKTMZrO6detmDUiS5O7urj59+kiS9u3bZ609cuSI/Pz8rAFJkqpWrarx48dLklasWGFdnpSUpG3btqlWrVoaMmSIdbmzs7MmTpwoBwcHffXVVyV6fAAA4O5g85BkGUN0+vTpfOvOnDkjSapUqZIkaefOnZKkjh075qv19fWVq6ur9u/fL5PJJEnatWuXzGaz2rVrl2+skqenpxo3bqyTJ0/q6NGjxXdAAADgrmTzkPTII4/Izs5OmzZt0ieffKKMjAz99ddfWr16tVasWKFKlSrpqaeekiRrmPHx8TFsq3bt2srNzVViYmKe+vr16xvWW65cJSQkFOsxAQCAu4/NxyTVq1dPb775pubPn68PP/xQH374oXVdixYtNGnSJHl4eEiS0tLSJElubm6GbVmWp6enS5JSU1NvqB4AAKAgpfIIgAceeECtW7fWnj171KxZM9nb2+vQoUM6dOiQVq5cqddee012dnbKysqSJDk5ORm24+joKEk6f/68JN1wvRHLW5h5G3Px4VwWH85l8eFcFh/OZfHhXN66hg0bFltbNg9JBw4c0CuvvCJPT0998cUXqlmzpqQrY5TGjRunL7/8Ui4uLho5cqR1XJGdnZ1hW1c/KkDSdesL2u5qDRs2VHx8fLGe5HsZ57L4cC6LD+ey+HAuiw/n8vZj8zFJ7777rkwmkyZNmmQNSJJUvXp1TZ8+XQ4ODvriiy+UnZ0tZ2dnSdKFCxcM27p48aKkv68cXa/estxSBwAAUBCbhqTs7GwdOnRIFSpUUNOmTfOt9/LyUp06dXT+/Hn98ccfql69uqS/xyZd69oxSDdaDwAAUBCbhqRz587JbDbne+3I1SzrLl26ZJ3VZpm9djWz2aykpCQ5ODioXr16kv6eBVfQFP9jx45JKnj2GwAAgIVNQ5Krq6sqVaqkzMxMHTp0KN/6lJQUHTt2TGXLllXdunXl7+8vSYqIiMhXGxsbq4yMDPn6+srFxUWSrPVbt25Vbm5unvpTp04pLi5ONWrUKPCRAgAAABY2Hbhtb2+vXr166bPPPtOMGTP03nvvyd3dXdKVB0lOmTJFly5d0jPPPKPy5curZcuW8vHxUWRkpFatWqWAgABJV15LMnv2bEnK84oRLy8v+fv7a+fOnQoJCdGLL74o6cqstxkzZignJ0f9+/e35SEDuM2898orOnvwYImMTSxbv77++cEHxd4ugNJh89ltI0aM0OHDhxUVFaXevXvrwQcflJ2dnQ4ePKi//vpLzZs316uvvirpSqiaNGmSgoKCNHPmTK1evVpubm6Kjo7W2bNnFRAQoPbt2+dpf9y4cRo2bJg+/vhjbdmyRXXq1FFsbKxSU1PVpk0b9e7d29aHDOA2cikhQfOio0uk7Ykl0iqA0mLzkOTo6KgFCxbom2++0bp16xQTEyOz2Sxvb289//zz6tevn8qVK2etb9asmZYtW6bFixdr7969SkhIkLe3t0aPHq1evXrla9/Ly0thYWEKCQnRjh07dPz4cdWsWVN9+/ZVYGCgypQplUdDAQCAO0ypJIYyZcooMDBQgYGBRar38fHRrFmzity+h4eHJk+efLPdAwAAsP1zkgAAAO4EhCQAAAADhCQAAAADhCQAAAADhCQAAAADhCQAAAADhCQAAAADhCQAAAADhCQAAAADhCQAAAADhCQAAAADhCQAAAADhCQAAAADhCQAAAADhCQAAAADhCQAAAADhCQAAAADhCQAAAADhCQAAAADhCQAAAADhCQAAAADhCQAAAADhCQAAAADhCQAAAADZUq7AwBwrfdeeUWXEhJKpO3j8fEl0i6Auw8hCcBt51JCgqZv314ibQ+qVKlE2gVw9+F2GwAAgAFCEgAAgAFCEgAAgAFCEgAAgAFCEgAAgAFCEgAAgAFCEgAAgAFCEgAAgAFCEgAAgAFCEgAAgAFCEgAAgAFCEgAAgAFCEgAAgIEyttxZ69ati1S3cOFC+fn5Wb9PSkrSkiVLFBMTo8zMTHl7eysgIEB9+vSRvX3+nHf69GmFhoYqMjJSaWlp8vDwUPfu3TVw4ECVK1eu2I4HAADcvWwakrp161bguuPHj+vgwYNycXGRl5eXdXlcXJxGjhwpk8kkX19fNW3aVFFRUZo7d64OHjyoadOm5WknOTlZQ4cOVUpKiho3bqwmTZpo//79CgkJ0d69e7VgwQKVKWPTwwYAAHcgm6aFawONRXZ2tgYNGiRJmjp1qjw9PSVJZrNZwcHBMplMmjp1qrp37y5JysjIUFBQkMLDw9WpUyd16dLF2tacOXOUkpKikSNHaujQoZKkrKwsjR07Vrt379aKFSs0YMCAkjxMAABwF7gtxiTNnz9fiYmJCggIUIcOHazLIyMjdeTIEfn5+VkDkiRVrVpV48ePlyStWLHCujwpKUnbtm1TrVq1NGTIEOtyZ2dnTZw4UQ4ODvrqq69scEQAAOBOV+oh6fDhw/r+++/l6uqql19+Oc+6nTt3SpI6duyYbztfX1+5urpq//79MplMkqRdu3bJbDarXbt2+cYqeXp6qnHjxjp58qSOHj1aQkcDAADuFqUekubNmyez2azhw4erYsWKedZZwoyPj4/htrVr11Zubq4SExPz1NevX9+wvk6dOpKkhISEYuk7AAC4e5VqSNqxY4cOHDggd3d39erVK9/6tLQ0SZKbm5vh9pbl6enpkqTU1NQbqgcAAChIqYakzz//XJLUv39/wxlnWVlZkiQnJyfD7R0dHSVJ58+fv6l6AACAgpTaXPijR49q9+7dqlChgp5++mnDGsu4Ijs7O8P1ZrP5huoL2u5q8fHxeb7i1nEui8+9ci4t/+ApCTk5OSXWdlZW1j3zGV3tXjzmksK5vHUNGzYstrZKLST99NNPkqTOnTvL2dnZsMay/MKFC4brL168KOnvK0fXq7csL2h/0pWTGx8fX6wn+V7GuSw+99K5LOzP6K1ycHAosbadnZ3vmc/I4l76uSxpnMvbT6ndbvv5558lSV27di2wpnr16pL+Hpt0rWvHIN1oPQAAQEFKJSQlJycrISFBFSpUUKtWrQqss8xqs8xeu5rZbFZSUpIcHBxUr169PPUFTfE/duyYpIJnvwEAAFiUSkg6ePCgJKlZs2aFviLE399fkhQREZFvXWxsrDIyMuTr6ysXF5c89Vu3blVubm6e+lOnTikuLk41atQo8JECAAAAFqUSkn799VdJUtOmTQuta9mypXx8fBQZGalVq1ZZl2dkZGj27NmSlOcVI15eXvL391dSUpJCQkKsy7OysjRjxgzl5OSof//+xXkoAADgLlUqA7f//PNPScrzIlsj9vb2mjRpkoKCgjRz5kytXr1abm5uio6O1tmzZxUQEKD27dvn2WbcuHEaNmyYPv74Y23ZskV16tRRbGysUlNT1aZNG/Xu3bvEjgsAANw9SiUkZWRkSJLc3d2vW9usWTMtW7ZMixcv1t69e5WQkCBvb2+NHj3a8AGUXl5eCgsLU0hIiHbs2KHjx4+rZs2a6tu3rwIDAwu9vQcAAGBRKolh4cKFN1Tv4+OjWbNmFbnew8NDkydPvtFuAQAAWJX6u9sAAABuR4QkAAAAA4QkAAAAA4QkAAAAA4QkAAAAA4QkAAAAA4QkAAAAA4QkAAAAA4QkAAAAA4QkAAAAA4QkAAAAA4QkAAAAA4QkAAAAA4QkAAAAA4QkAAAAA4QkAAAAA4QkAAAAA4QkAAAAA4QkAAAAA4QkAAAAA4QkAAAAA4QkAAAAA4QkAAAAA4QkAAAAA4QkAAAAA4QkAAAAA4QkAAAAA4QkAAAAA4QkAAAAA4QkAAAAA4QkAAAAA4QkAAAAA4QkAAAAA4QkAAAAA4QkAAAAA4QkAAAAA4QkAAAAA4QkAAAAA4QkAAAAA2VKa8cnT55UaGioIiMjlZ6erqpVq6pt27YaMWKE3Nzc8tQmJSVpyZIliomJUWZmpry9vRUQEKA+ffrI3j5/zjt9+rS17bS0NHl4eKh79+4aOHCgypUrZ6tDBAAAd7BSuZJ0+PBhDRgwQGvWrFGlSpXUtm1b2dnZadWqVRoxYoTOnj1rrY2Li9PgwYO1YcMG1ahRQ/7+/kpOTtbcuXMVHBycr+3k5GQNGTJE3333nSpWrKi2bdvKZDIpJCREr776qi5fvmzDIwUAAHcqm19JunjxoiZNmqRz587pX//6l/r27StJunDhgkoN/fwAACAASURBVKZMmaLNmzdryZIl+te//iWz2azg4GCZTCZNnTpV3bt3lyRlZGQoKChI4eHh6tSpk7p06WJtf86cOUpJSdHIkSM1dOhQSVJWVpbGjh2r3bt3a8WKFRowYICtDxsAANxhbH4l6aefftIff/yhbt26WQOSJDk6Ouq1116Tq6urkpKSJEmRkZE6cuSI/Pz8rAFJkqpWrarx48dLklasWGFdnpSUpG3btqlWrVoaMmSIdbmzs7MmTpwoBwcHffXVVyV9iAAA4C5g8ytJmzdvliT1798/3zoPDw+Fh4dbv9+5c6ckqWPHjvlqfX195erqqv3798tkMsnFxUW7du2S2WxWu3bt8o1V8vT0VOPGjXX48GEdPXpUPj4+xXlYAADgLmPzkPS///1PZcuWVcOGDZWcnKzw8HAdP35clStXVpcuXdS0aVNr7dGjRyWpwEBTu3ZtpaenKzExUc2bN7fW169f37C+Tp06Onz4sBISEghJAACgUDYNSRcvXlRycrLc3d21adMmTZ8+XdnZ2db1n376qf7xj3/olVdekSSlpaVJUr7ZbhaW5enp6ZKk1NTUG6oHAAAoiE3HJJlMJknS2bNnFRwcrE6dOunrr7/Wpk2bNGPGDFWqVEn//e9/9d1330m6MuBakpycnAzbc3R0lCSdP3/+puoBAAAKYvMrSZKUnZ2thx9+WNOmTbOue+yxx+Ts7KwxY8Zo6dKlCggIsI4rsrOzM2zPbDbn+f569QVtd7X4+Pg8X3HrOJfF5145l5Z/8JSEnJycEms7KyvrnvmMrnYvHnNJ4VzeuoYNGxZbWzYNSVdf4enTp0++9e3atZO7u7tSUlL0xx9/yNnZWdKVxwMYsYQuS7vXq7cst9QZadiwoeLj44v1JN/LOJfF5146l4X9Gb1VDg4OJda2s7PzPfMZWdxLP5cljXN5+7Hp7bYKFSqobNmykqQaNWoY1nh6ekqSzpw5o+rVq0v6e2zSta4dg3Sj9QAAAAWxaUhycHBQ3bp1Jf0dWK5lCThVq1a1zkBLTEzMV2c2m5WUlCQHBwfVq1dP0t+z4Cyz3K517NgxSQXPfgMAALCw+cMk27RpI+nKQyWvlZSUpJMnT6p69ery8vKSv7+/JCkiIiJfbWxsrDIyMuTr6ysXFxdJstZv3bpVubm5eepPnTqluLg41ahRg+n/AADgumwekp555hk5Oztr3bp1eR4cefbsWU2fPl25ubnWF9e2bNlSPj4+ioyM1KpVq6y1GRkZmj17tiTlecWIJVglJSUpJCTEujwrK0szZsxQTk6O4UMsAQAArmXzh0nWqFFDEydO1OTJkzV58mR9/vnnql69ug4cOKAzZ87ooYce0sCBAyVdma02adIkBQUFaebMmVq9erXc3NwUHR2ts2fPKiAgQO3bt8/T/rhx4zRs2DB9/PHH2rJli+rUqaPY2FilpqaqTZs26t27t60PGQAA3IFsHpKkK9P969Spo2XLlik6OlqJiYmqWbOmBgwYoAEDBqhMmb+71axZMy1btkyLFy/W3r17lZCQIG9vb40ePVq9evXK17aXl5fCwsIUEhKiHTt26Pjx46pZs6b69u2rwMDAPG0DAAAUpNQSQ6NGjTRr1qwi1fr4+BS5VrryDrjJkyffbNcAAABsPyYJAADgTkBIAgAAMEBIAgAAMEBIAgAAMEBIAgAAMEBIAgAAMEBIAgAAMEBIAgAAMEBIAgAAMEBIAgAAMEBIAgAAMEBIAgAAMEBIAgAAMEBIAgAAMEBIAgAAMEBIAgAAMEBIAgAAMEBIAgAAMEBIAgAAMEBIAgAAMEBIAgAAMEBIAgAAMEBIAgAAMEBIAgAAMEBIAgAAMEBIAgAAMEBIAgAAMEBIAgAAMEBIAgAAMEBIAgAAMEBIAgAAMEBIAgAAMEBIAgAAMEBIAgAAMEBIAgAAMEBIAgAAMEBIAgAAMEBIAgAAMEBIAgAAMEBIAgAAMFCmNHa6bt06BQcHF7h+yJAhevHFF63fHz58WKGhoTp8+LCysrLk4+Ojvn37qlu3bobbJyUlacmSJYqJiVFmZqa8vb0VEBCgPn36yN6eXAgAAK6vVELS//73P0nSww8/rKpVq+Zb36hRI+v/R0ZG6rXXXpPZbNaDDz4oJycn7dmzR5MnT9bRo0c1evToPNvGxcVp5MiRMplM8vX1VdOmTRUVFaW5c+fq4MGDmjZtWskeHAAAuCuUSkiKi4uTJE2aNEnu7u4F1mVnZ2vKlCmSpAULFuihhx6SJB0/flyjRo1SWFiYOnfurPvuu0+SZDabFRwcLJPJpKlTp6p79+6SpIyMDAUFBSk8PFydOnVSly5dSvLwAADAXaBU7j3FxcXJ1dW10IAkST/++KPS09PVrVs3a0CSpFq1aumll16SJK1YscK6PDIyUkeOHJGfn581IElS1apVNX78+Hz1AAAABbF5SDpx4oT++usv69WfwuzcuVOS1LFjx3zr2rVrJwcHB2vN9ep9fX3l6uqq/fv3y2Qy3Wz3AQDAPcLmIclyq83V1VXvvPOOnnnmGbVr1059+vTR0qVLdeHCBWvt0aNHJUn169fP106FChXk5uamjIwMpaWl5an38fEx3Hft2rWVm5urxMTEYj0mAABw97F5SLIM2l6zZo3Wr18vHx8fNWvWTCkpKQoJCVFQUJCys7MlyRp+3NzcDNuyLE9PT7+pegAAgILYfOC2JSR17dpVkyZNkrOzsyTpzz//1NixYxUbG6tFixbpn//8p7KysiRJjo6Ohm1ZllvqLF+dnJwKrT9//nyB/YuPj8/zFbeOc1l87pVzafmzXBJycnJKrO2srKx75jO62r14zCWFc3nrGjZsWGxt2TwkzZo1SydOnJC3t7fKli1rXV6zZk1NmTJFAwcO1KpVq/TSSy/J3t5eZrNZdnZ2hm2ZzeY8Xy3PQLpefWEaNmyo+Pj4Yj3J9zLOZfG5l86l5R9PJcHBwaHE2nZ2dr5nPiOLe+nnsqRxLm8/Nr/d5ujoKB8fnzwByaJRo0Zyd3fX+fPnlZSUJGdnZ5nN5jzjlK528eJFSX//hWr5er36gq40AQAAWNx2j5+uVq2apCtBxzKGyDLW6Fqpqal5tqlevXqR6gsaswQAAGBh05BkMpk0c+ZMvfHGG7p8+bJhzZ9//inpSuCxzGozmo127tw5paamqmrVqtaQZJnVZlRvNpuVlJQkBwcH1atXr1iOBwAA3L1sGpLKly+vX375RZs3b1Z0dHS+9Tt37tSZM2fUoEEDVa9eXf7+/pKkiIiIfLXbtm1TTk6O2rRpY11WWH1sbKwyMjLk6+srFxeX4jokAABwl7JpSLKzs1NAQIAkad68eTp9+rR13fHjxzV79mxJV15wK0mdO3eWq6ur1q5dq+3bt1trT5w4of/85z+ys7NT//79rctbtmwpHx8fRUZGatWqVdblGRkZ1rYHDBhQcgcIAADuGjaf3fbCCy9o37592r9/v5599ln5+vpKkqKionTx4kX1799fjz32mKQrD4x86623NH78eI0ZM0YtW7ZU+fLltWfPHmVnZ+vFF1/MMxPA3t5ekyZNUlBQkGbOnKnVq1fLzc1N0dHROnv2rAICAtS+fXtbHzIAALgD2TwkOTk56aOPPtLnn3+u8PBwRUVFqWzZsmrevLn69u2rzp0756nv0KGDQkJCFBoaqoMHD8psNqtBgwbq37+/unbtmq/9Zs2aadmyZVq8eLH27t2rhIQEeXt7a/To0erVq5etDhMAANzhbB6SJKls2bIaNGiQBg0aVKT6Fi1a6IMPPihy+z4+Ppo1a9bNdg8AAOD2ewQAAADA7YCQBAAAYICQBAAAYICQBAAAYICQBAAAYICQBAAAYICQBAAAYICQBAAAYICQBAAAYICQBAAAYICQBAAAYICQBAAAYICQBAAAYICQBAAAYICQBAAAYICQBAAAYICQBAAAYICQBAAAYKDIISk0NFTJycmG606cOKE5c+YUW6cAAABKW5nCVp44ccL6/6GhoapXr54uX76cr+7nn3/WmjVrNG7cuOLvIQAAQCkoNCTNnz9f27dvlySZzWZNmDDBsM5sNsvf37/4ewcAAFBKCg1J48eP1+7duyVJb7/9tgYNGiRvb+88NQ4ODqpQoYJatWpVcr0EAACwsUJDkru7u3r27ClJOnnypJ566il5eHjYpGMAAAClqdCQdLXhw4dLks6ePausrCyZzeZ8NZ6ensXXMwAAgFJU5JB04sQJBQcH68CBAwXW7Nq1q1g6BQAAUNqKHJLmzp2rxMREDRkyRB4eHrKzsyvJfgEAAJSqIoekqKgojR07Vk8++WRJ9gcAAOC2UOSHSTo5OalatWol2RcAAIDbRpFDUteuXbVu3bqS7AsAAMBto8i32xo0aKCFCxfqhRdekK+vr5ycnPKst7Oz04gRI4q9gwAAAKWhyCFp9uzZkqRDhw7p0KFD+dYTkgAAwN2kyCEpMjKyJPsBAABwWynymCQAAIB7SZGvJL399tvXrZk0adItdQYAAOB2cUu3286fPy+TyaQqVaqoUaNGxdoxAACA0lTkkLR27VrD5b/99pveeustPfPMM8XWKQAAgNJ2y2OSmjRpoqFDh2rx4sXF0R8AAIDbQrEM3HZ1ddXx48eLoykAAIDbQpFvt+Xm5houO3XqlD755BPVrFmzWDsGAABQmoockvz9/WVnZ1fg+qLMfjOSmZmpfv36KTU1Vbt37863PikpSUuWLFFMTIwyMzPl7e2tgIAA9enTR/b2+S+EnT59WqGhoYqMjFRaWpo8PDzUvXt3DRw4UOXKlbupPgIAgHtPkUPS0KFD84UkOzs7ubi4qH379qpVq9ZNdWDOnDlKTU01XBcXF6eRI0fKZDLJ19dXTZs2VVRUlObOnauDBw9q2rRpeeqTk5M1dOhQpaSkqHHjxmrSpIn279+vkJAQ7d27VwsWLFCZMkU+ZAAAcA8rcmIoiVeOrF+/Xhs3bjRcZzabFRwcLJPJpKlTp6p79+6SpIyMDAUFBSk8PFydOnVSly5drNvMmTNHKSkpGjlypIYOHSpJysrK0tixY7V7926tWLFCAwYMKPbjAAAAd58bGrh94cIFffXVV3rjjTcUFBSkCRMm6Ouvv1Z2dvYN7/j06dN655131KJFCzk4OORbHxkZqSNHjsjPz88akCSpatWqGj9+vCRpxYoV1uVJSUnatm2batWqpSFDhliXOzs7a+LEiXJwcNBXX311w/0EAAD3piKHpMzMTA0ZMkTz5s3Tr7/+qqysLB04cEBz587VoEGD9Ndff93QjqdPn66LFy9qypQphut37twpSerYsWO+db6+vnJ1ddX+/ftlMpkkSbt27ZLZbFa7du3yjVXy9PRU48aNdfLkSR09evSG+gkAAO5NRQ5JH330kVJSUrRw4UJ9//33WrZsmVavXq2FCxcqIyNDixYtKvJOv/nmG+3cuVMvvfSSvL29DWssYcbHx8dwfe3atZWbm6vExMQ89fXr1zesr1OnjiQpISGhyP0EAAD3riKHpIiICI0cOVItW7bMs7xly5YaPny4IiIiitTO8ePHtWDBAj300EN69tlnC6xLS0uTJLm5uRmutyxPT0+XJOvg76LWAwAAFKbIA7ezs7Pl5eVluM7Ly0uZmZnXbSMnJ0fBwcGyt7fX5MmTC32kQFZWliTJycnJcL2jo6OkK++Pu5n6gsTHx+f5ilvHuSw+98q5tPx5Lgk5OTkl1nZWVtY98xld7V485pLCubx1DRs2LLa2ihyS6tatqy1btqhNmzb51kVERBTpEQCfffaZYmNjNWHCBHl6ehZaaxlXVFCQMpvNN1Rf0HbXatiwoeLj44v1JN/LOJfF5146l87OziXWttFEkeLi7Ox8z3xGFvfSz2VJ41zefoockgYMGKCJEycqJydHjz/+uKpVq6a0tDStX79ea9eutc44K0hcXJyWLFmitm3bqlevXtfdn+UvyQsXLhiuv3jxoqS/rxxdr96yvCT/8gUAAHePIoekxx57TL///rvCwsK0Zs0aSVeuypQrV05Dhw7V008/Xej2Cxcu1KVLl3T58mVNnjw5zzrLK08sy8eMGaPq1asrLi5OaWlpqlu3br72rh2DVL16dUl/j2W6Xj0AAEBhihSSzGaz/vrrLw0dOlTPPfecDh48qMzMTFWuXFn33XefqlSpct02LGMMIiMjC6wJDw+XJI0aNUo+Pj7avn27EhMT5efnl68/SUlJcnBwUL169ST9PQuuoCn+x44dk1Tw7DcAAICrXXd2W2xsrHr37q0vvvhCklSxYkX5+/urVatW+uc//6lBgwbpf//733V3tGjRIu3evdvwP8sYAcv3NWvWlL+/vyQZzpqLjY1VRkaGfH195eLiIknW+q1bt+Z7Ge+pU6cUFxenGjVqFPhIAQAAgKsVGpKSkpL06quvys7OTs2aNcuzrmLFipo8ebIcHBw0atQo/fnnn8XasZYtW8rHx0eRkZFatWqVdXlGRoZmz54tSXleMeLl5SV/f38lJSUpJCTEujwrK0szZsxQTk6O+vfvX6x9BAAAd69Cb7d98skncnd319KlS1WhQoU868qVK6cePXqoXbt2ev755xUWFqa33nqr2Dpmb2+vSZMmKSgoSDNnztTq1avl5uam6OhonT17VgEBAWrfvn2ebcaNG6dhw4bp448/1pYtW1SnTh3FxsYqNTVVbdq0Ue/evYutfwAA4O5W6JWk6Oho9evXL19AulrlypXVr18/RUVFFXvnmjVrpmXLlqlLly76/fffFRkZKU9PT73xxhuGs+m8vLwUFhamnj17KiMjQ9u3b1fFihUVFBSk2bNnq0yZIo9TBwAA97hCU0NaWlqBD5C8mo+Pj1JSUm66E5b3tBXU9qxZs4rcloeHR77ZcwAAADeq0CtJrq6uOn369HUbSU9PL9IMNwAAgDtFoSHJz8/P+kykwvzwww9q3LhxsXUKAACgtBUakp577jnt379f8+bNM3yS9cWLFzV//nzt2bOn0JfVAgAA3GkKHZPUpEkTvf7663rnnXe0YcMGtWrVSjVr1lROTo5OnjypqKgoZWZmatSoUXr44Ydt1WcAAIASd93pXs8884waNmyozz77TFu2bLFeUSpfvrweeeQRDRgwQM2bNy/xjgIAANhSkebE33///ZozZ44k6cyZM3JwcFDFihVLtGMAAACl6YYfHMQsNgAAcC+47rvbAAAA7kWEJAAAAAOEJAAAAAOEJAAAAAOEJAAAAAOEJAAAAAOEJAAAAAOEJAAAAAOEJAAAAAOEJAAAAAOEJAAAAAOEJAAAAAOEJAAAAAOEJAAAAAOEJAAAAAOEJAAAAAOEJAAAAANlSrsDAO5M773yii4lJJRI28fj40ukXQC4EYQkADflUkKCpm/fXiJtD6pUqUTaBYAbQUgCgGLy65EjeqdHj2Jvt2z9+vrnBx8Ue7sACkdIAoBiUiErq0Surk0s9hYBFAUDtwEAAAwQkgAAAAwQkgAAAAwQkgAAAAwQkgAAAAwQkgAAAAwQkgAAAAwQkgAAAAwQkgAAAAwQkgAAAAwQkgAAAAyUyrvbcnJy9M033+j777/X77//LicnJ913333q27ev2rVrl68+KSlJS5YsUUxMjDIzM+Xt7a2AgAD16dNH9vb5c97p06cVGhqqyMhIpaWlycPDQ927d9fAgQNVrlw5WxwiAAC4w5XKlaRp06Zp3rx5OnnypFq1aqUmTZooOjpaY8aM0dKlS/PUxsXFafDgwdqwYYNq1Kghf39/JScna+7cuQoODs7XdnJysoYMGaLvvvtOFStWVNu2bWUymRQSEqJXX31Vly9fttFRAgCAO5nNryRt3LhRP/74o+rUqaNFixapWrVqkqSEhAQNHz5cS5Ys0WOPPabatWvLbDYrODhYJpNJU6dOVffu3SVJGRkZCgoKUnh4uDp16qQuXbpY258zZ45SUlI0cuRIDR06VJKUlZWlsWPHavfu3VqxYoUGDBhg68MGAAB3GJtfSQoPD5ckBQUFWQOSJNWvX1/dunVTbm6uIiMjJUmRkZE6cuSI/Pz8rAFJkqpWrarx48dLklasWGFdnpSUpG3btqlWrVoaMmSIdbmzs7MmTpwoBwcHffXVVyV6fAAA4O5g8ytJs2bN0u+//y5vb+9860wmkyTJwcFBkrRz505JUseOHfPV+vr6ytXVVfv375fJZJKLi4t27dols9msdu3a5Rur5OnpqcaNG+vw4cM6evSofHx8ivvQAADAXcTmV5LKli2r+vXr5xtAvXXrVm3evFnly5e3hqKjR49KUoGBpnbt2srNzVViYmKe+vr16xvW16lTR9KVW3sAAACFKZXZbRbZ2dkKDg5WYmKiEhMT5enpqeDgYOttuLS0NEmSm5ub4faW5enp6ZKk1NTUG6oHAAAoSKk+Jyk5OVmbN2+2XgmSpCNHjlj/PysrS5Lk5ORkuL2jo6Mk6fz58zdVDwAAUJBSvZLk7u6uDRs2yN7eXrt379b8+fM1d+5cZWVladCgQdZxRXZ2dobbm83mPN9fr76g7a4WHx+f5ytuHeey+NxO59Lyj5KSkJOTQ9tXycrKuq0++2vdzn2703Aub13Dhg2Lra1SDUnOzs5ydnaWJHXt2lUeHh4aNmyYwsLCFBgYaF134cIFw+0vXrwo6e8rR9ertyy31Blp2LCh4uPji/Uk38s4l8XndjuXhf05ulWWyRu0fYWzs/Nt9dlf7Xb7ubyTcS5vP7fVa0nuv/9+1apVSyaTSSdOnFD16tUl/T026VrXjkG60XoAAICC2DQkmc1mffDBB5owYUKBT74uW7asJOny5cvWWW1Xj1m6uq2kpCQ5ODioXr16kv6eBWeZ5XatY8eOSSp49hsAAICFTUOSnZ2dIiIitHHjRusDI6924sQJJSUlydnZWXXq1JG/v78kKSIiIl9tbGysMjIy5OvrKxcXF0my1m/dulW5ubl56k+dOqW4uDjVqFGDZyQBAIDrsvnttqefflqSNG/ePCUnJ1uXp6SkaOLEicrJyVGfPn3k6Oioli1bysfHR5GRkVq1apW1NiMjQ7Nnz5akPK8Y8fLykr+/v5KSkhQSEmJdnpWVpRkzZignJ0f9+/cv6UMEAAB3AZsP3A4MDFRUVJS2b9+u5557Tr6+vsrJydGhQ4d0/vx5tW3bVqNGjZJ0ZbbapEmTFBQUpJkzZ2r16tVyc3NTdHS0zp49q4CAALVv3z5P++PGjdOwYcP08ccfa8uWLapTp45iY2OVmpqqNm3aqHfv3rY+ZAAAcAeyeUgqU6aM5s6dq2+++UZr167Vvn37ZGdnpwYNGqhnz54KCAjI80qRZs2aadmyZVq8eLH27t2rhIQEeXt7a/To0erVq1e+9r28vBQWFqaQkBDt2LFDx48fV82aNdW3b18FBgaqTJlSndAHAADuEKWSGBwcHNS3b1/17du3SPU+Pj6aNWtWkdv38PDQ5MmTb7Z7AAAAt9cjAAAAAG4XhCQAAAADhCQAAAADhCQAAAADhCQAAAADhCQAAAADhCQAAAADhCQAAAADhCQAAAADhCQAAAADhCQAAAADhCQAAAADhCQAAAADhCQAAAADhCQAAAADhCQAAAADhCQAAAADhCQAAAADhCQAAAADhCQAAAADhCQAAAADhCQAAAADhCQAAAADhCQAAAADhCQAAAADhCQAAAADhCQAAAADhCQAAAADhCQAAAADhCQAAAADhCQAAAADhCQAAAADhCQAAAADhCQAAAADhCQAAAADhCQAAAADhCQAAAADhCQAAAADhCQAAAADZUpjpzk5OVq5cqV++OEHHTt2TLm5uapZs6Yef/xx/eMf/5Cjo2Oe+sOHDys0NFSHDx9WVlaWfHx81LdvX3Xr1s2w/aSkJC1ZskQxMTHKzMyUt7e3AgIC1KdPH9nbkwsBAMD12Twk5eTk6PXXX9f27dtVvnx5NW/eXGXKlNHBgwcVEhKi7du366OPPpKTk5MkKTIyUq+99prMZrMefPBBOTk5ac+ePZo8ebKOHj2q0aNH52k/Li5OI0eOlMlkkq+vr5o2baqoqCjNnTtXBw8e1LRp02x9yAAA4A5k85D0/fffa/v27WrQoIHee+89ubu7S5LOnDmjf/3rXzpw4ICWLl2qoKAgZWdna8qUKZKkBQsW6KGHHpIkHT9+XKNGjVJYWJg6d+6s++67T5JkNpsVHBwsk8mkqVOnqnv37pKkjIwMBQUFKTw8XJ06dVKXLl1sfdgAAOAOY/N7T2vXrpUkjRkzxhqQJKlKlSoaP368JGnDhg2SpB9//FHp6enq1q2bNSBJUq1atfTSSy9JklasWGFdHhkZqSNHjsjPz88akCSpatWq1ravrgcAACiIzUNSlSpVVLduXTVr1izfutq1a0uSUlNTJUk7d+6UJHXs2DFfbbt27eTg4GCtuV69r6+vXF1dtX//fplMpls/kP9v777DojgTP4B/aSJFhBVFMagsYAmeRIxeUInimXv00TtIzkTFWIi9gSWe0R82LBEVT9FTwK6nTzTJo3i2GEssyFlPERGpYkFRmiIsbdnfH2TnXJmlCAvL7vfzD8m8777MjO8M3515Z14iIiLSafV+u239+vVqy+Li4gBAuMKUkpICAHBycqpQ19LSEra2tsjIyEBWVhZatGgh1JdKpaLtt2vXDtnZ2UhNTUXXrl1rtR1ERESk27TmUS+FQoGIiAgAgJeXFwAgKysLAGBrayv6GeXy7Ozs96pPREREpI7WhKQtW7bg1q1bkEgkGD16NABAJpMBQIVXAigplyvrKX8qn4xTV7+goKDuVpyIiIh0UoO8J+ld4eHh2LNnD5o0aYJVq1bBxsYGAGBoaAiFQgEDAwPRzykUCpWfyncgVVW/MomJiSo/qfa4L+uONu1L5ZcSTZDL5Wz7LTKZTKv+7d+lzevW2HBf1p6LOY8eMAAAHQlJREFUi0udtdWgIam0tBRr167F4cOHYWpqiuDgYLi7uwvlZmZmyMvLQ1FRkejVpOLiYqHe2z+LiopEf5+yvrorTUD5zk1MTKzTnazPuC/rjrbtS+XxpglGRkZs+y1mZmZa9W//Nm3rl40Z96X2abDbbQUFBZg7dy4OHz6MZs2aYePGjejdu7dKHeUYIuVYo3cpn4Jr0aIFAKBly5bVqq9uzBIRERGRUoOEpNevX2PKlCmIjo6GnZ0dIiIiVK4gKSmfaktNTa1Q9ubNG2RmZsLGxkYIScqn2sTqKxQKpKWlwcjICI6OjnW5OURERKSD6j0klZSUYNasWYiPj4ejoyO2b98u+og/AHh4eAAALly4UKHs8uXLkMvlKlefKqsfExODnJwcuLm5wcLCoi42hYiIiHRYvYek8PBwxMbGws7ODmFhYbCzs1Nb18vLCxKJBMeOHUNUVJSw/OnTp9i8eTMMDAzg6+srLHd3d4dUKsXVq1dx5MgRYXlOTg6Cg4MBAKNGjdLAVhEREZGuqdeB269evRKmBbGxscE//vEPtXWDgoJgaWmJhQsXYv78+ZgzZw7c3d1hbm6O69evo7CwEFOnTlUZ5GZoaIhFixZh+vTpWLVqFY4ePQpbW1vcunULr1+/ho+PDzw9PTW+nURERNT41WtIiouLE548i4+PR3x8vNq6QUFBAIBPP/0U4eHh2L59O2JjY6FQKODs7AxfX18MHDiwwudcXV2xc+dORERE4MaNG0hOToaDgwOmTZsGb29vzWwYERER6Zx6DUkeHh64du1ajT/XrVs3hIaGVru+VCrF6tWra/x7iIiIiJS05o3bRERERNqEIYmIiIhIBEMSERERkQiGJCIiIiIRDElEREREIhp0glsiIqra/aQkrB0yRCNtmzg5YVYNnh4m0icMSUREWs5SJsOKt2YdqEuBGmmVSDfwdhsRERGRCIYkIiIiIhEMSUREREQiGJKIiIiIRDAkEREREYlgSCIiIiISwZBEREREJIIhiYiIiEgEXyZJpMM2+PujJDlZI20/SUzUSLtERNqCIYlIh5UkJ2vsTc1jraw00i4Rkbbg7TYiIiIiEQxJRERERCIYkoiIiIhEMCQRERERiWBIIiIiIhLBkEREREQkgiGJiIiISARDEhEREZEIhiQiIiIiEQxJRERERCIYkoiIiIhEMCQRERERiWBIIiIiIhLBkEREREQkgiGJiIiISARDEhEREZEIhiQiIiIiEQxJRERERCIYkoiIiIhEMCQRERERiWBIIiIiIhLBkEREREQkgiGJiIiISIRWhKRjx46hV69euH37tmh5WloaAgMDMXToUHh6esLX1xeHDh1CWVmZaP2XL1/i+++/h4+PDzw9PTFs2DDs2LEDxcXFmtwMIiIi0iENHpJiYmKwbt06teUJCQkYN24cTp8+jTZt2sDDwwMZGRlYt24dli5dWqF+RkYG/Pz8cPjwYTRr1gx9+vRBfn4+wsPDERAQgNLSUg1uDREREekK44b85efPn0dQUBAKCgpEyxUKBZYuXYr8/HwsW7YMgwcPBgDk5ORg+vTpOHXqFPr3748BAwYIn1mzZg1evHiByZMnY/z48QAAmUyGefPm4dq1azh48CBGjRql+Y0jIiKiRq1BriRlZGRgyZIlmD9/PuRyOSQSiWi9q1evIikpCT169BACEgDY2Nhg/vz5AICDBw8Ky9PS0nD58mV88MEH8PPzE5abmZkhMDAQRkZGOHTokIa2ioiIiHRJg4SksLAwnDx5El26dMHOnTvRoUMH0XrR0dEAgH79+lUoc3Nzg0QiwZ07d5Cfnw8A+M9//gOFQoG+ffvC0FB101q3bo1OnTrh2bNnSElJqdsNIiIiIp3TICGpQ4cOWLJkCXbt2gVnZ2e19ZRhRiqVipa3a9cOZWVlSE1NVanv5OQkWr99+/YAgOTk5PdedyIiItIPDTImaezYsdWql5WVBQCwtbUVLVcuz87OBgBkZmbWqD4RERGROg06cLsqMpkMANC0aVPRclNTUwAQBn7XtL6YxMRElZ9Ue9yXdaem+1J5TGiCXC5n2/XUtibXWSaT1foY5TFed7gva8/FxaXO2tLqkKQcV2RgYCBarlAoalRf3efe5uLigsTExDrdyfqM+7LuvM++NDMz09DaAEZGRmy7ntrW5DqbmZnV6hjlMV53uC+1T4O/J6kyyhN8UVGRaLny5ZDKK0dV1Vcu1+QfDiIiItINWh2SWrZsCeB/Y5Pe9e4YpJrWJyIiIlJHq0OS8qk25dNrb1MoFEhLS4ORkREcHR1V6qt7xP/hw4cA1D/9RkRERKSk1SHJw8MDAHDhwoUKZTExMcjJyYGbmxssLCxU6l+6dKnCvG7Pnz9HQkIC2rRpo/aVAkRERERKWh2S3N3dIZVKcfXqVRw5ckRYnpOTg+DgYABQmWKkbdu28PDwQFpaGsLDw4XlMpkMK1euhFwuh6+vb/1tABERETVaWv9026JFizB9+nSsWrUKR48eha2tLW7duoXXr1/Dx8cHnp6eKp/5+9//jgkTJmDXrl24ePEi2rdvj5iYGGRmZqJ3797429/+1kBbQ0RERI2JVockAHB1dcXOnTsRERGBGzduIDk5GQ4ODpg2bRq8vb0r1G/bti12796N8PBwXLlyBU+ePIG9vT2GDx+OESNGwNhY6zeZiIiItIBWJIawsLBKy6VSKVavXl3t9uzs7LB48eLarhYRERHpMa0ek0RERETUUBiSiIiIiEQwJBERERGJ0IoxSURE1DDuJyVh7ZAh7/15mUymdqonEycnzAoNfe+2iRoaQxIRkR6zlMmwIipKI20HaqRVovrD221EREREIngliUgLbPD3R0lycqV1Krutoc6TxMTarBYRkV5jSCLSAiXJyRq55THWyqrO2yQi0he83UZEREQkgiGJiIiISARDEhEREZEIhiQiIiIiEQxJRERERCIYkoiIiIhEMCQRERERiWBIIiIiIhLBkEREREQkgiGJiIiISARDEhEREZEIhiQiIiIiEQxJRERERCIYkoiIiIhEMCQRERERiTBu6BUgaiw2+PujJDlZI20/SUzUSLtERPT+GJKIqqkkORkroqI00vZYKyuNtEvUkO4nJWHtkCEaadvEyQmzQkM10jaREkMSERFphKVMprEvFoEaaZVIFcckEREREYlgSCIiIiISwZBEREREJIIhiYiIiEgEQxIRERGRCIYkIiIiIhEMSUREREQiGJKIiIiIRDAkEREREYlgSCIiIiISwZBEREREJIJzt5FO2eDvj5LkZI20/SQxUSPtEhGRdmJIIp1SkpyssQk1x1pZaaRdIqq5+0lJWDtkSJ23a+LkhFmhoXXeLjVOOhuSrl27hl27diEpKQmlpaXo3LkzxowZAw8Pj4ZeNSIiqiVLmUwjX4gC67xFasx0MiQdO3YMQUFBaNKkCT7++GPI5XLcvHkTAQEBWLBgAT7//POGXkW9xltiRKStNHWFCuBVqsZI50JSZmYmVq9eDUtLS2zbtg1OTk4AgLi4OEyfPh3r169Hnz590KpVqwZeU/3FW2JEpK00dYUK4FWqxkjnnm47dOgQiouLMXLkSCEgAcCHH36I0aNHo6ioCEeOHGnANSQiIqLGQOeuJEVHRwMA+vXrV6Gsf//+CAsLw5UrVzBp0qR6WydN3l7i5VsiIiLN0KmQpFAokJqaCkNDQzg6OlYob9euHQwNDZGSkgKFQgEDA4N6WS9N3l7i5VsiIiLNMMjNzVU09ErUlVevXuGzzz6DjY0NfvnlF9E6gwYNQnZ2Ns6dOwdLS8t6XkMiIiJqLHRqTFJhYSEAoGnTpmrrmJqaAgBkMlm9rBMRERE1TjoVkqpz+0yhUKj8JCIiIhKjUyHJ3NwcAFBUVKS2TnFxMQDAzMysXtaJiIiIGiedCkkWFhYwNzfHq1evUFpaWqG8tLQUubm5MDU1RbNmzRpgDYmIiKix0Kmn2wwMDODo6Ih79+7h0aNHkEqlKuVpaWkoKysT3p+Unp4OHx+farV95MgR2NvbAwD++9//YvLkyWrrDho0CEFBQe+5FY3bjh07EB4errZ84cKFFfY5p5ARV1hYiP379+Ps2bN4/PgxDAwM0KFDBwwZMgRffvklDA1Vv+OcOHECS5cuVduen58fpk6dquG11m7sa9Unl8vx888/4/jx43j48CHKyspgb2+PP//5z/j666+F8Z0Az4lVqemxGRcXh+3btyMuLg4ymQxSqRTDhw/HoEGD6mFttVOvXr2qVW/r1q3o0aMHACAjIwN/+ctf1NZ1c3PDtm3bKm1Pp0ISAHh4eODevXu4cOFChZB04cIFAEDv3r0BlN+eq6zTJSUlISkpCXZ2drC2thaWJyQkAAC6desmBKe3devWrdbb0Vg9ePAAQPk7qcQG0Ds4OKj8P6eQEVdQUICpU6fi/v37sLKygru7O0pKShAbG4uQkBBcv34dwcHBMDIyEj6j3Pd//OMfYWNjU6HNjh071tv6ayP2teqTy+X49ttvERUVBXNzc3Tt2hXGxsaIjY1FeHg4oqKisGXLFuEY5zmxcjU5Nq9evYrZs2dDoVCge/fuaNq0Ka5fv47FixcjJSUF06ZNq7f11iaV/a1+8uQJYmNjYWFhgbZt2wrLlfvd2dkZzs7OFT7Xvn37Kn+vzoWkoUOHYt++fdi7dy8++eQTdOnSBUB5Mt+3bx9MTU0xbNgwAIC1tbXabzeZmZn4+uuvYWxsjDVr1gjjnYD/7fiZM2fCzc1Nw1vUuDx48ACmpqZYtWoVjI0r716cQka9Xbt24f79++jZsydWr14t3B5OT0/HzJkzcfHiRURGRuKLL74QPqP8Q7Vo0SK93GeVYV+rmcjISERFRcHZ2RkbNmwQ9ktubi7mzp2Lu3fvYseOHZg+fToAnhOrUt1js7CwEEuWLAEAbNq0CR9//DGA8hAwZcoU7N69G15eXsLfNX2i7m91YWEhxo4dCwBYtmwZWrduLZQp++WYMWPe+yqcTo1JAgB7e3sEBAQgPz8f48ePR0BAAPz9/TFhwgQUFBRg4cKFkEgkVbazbNkyZGdnY+LEiRU65IMHD2BoaKj338zflZeXh2fPnsHFxaXKgARwCpnKHD9+HED57cm3x8/Z29vD398fAPDrr7+qfCYhIQESiYR/6EWwr9XMsWPHAABz5sxR6U/W1taYP38+AOD06dPCcp4TK1fdY/PkyZPIzs7GoEGDhIAEAB988AFmzJgBADh48KBG17WxWb9+PVJTU+Hj44NPP/1UpUwZkjp37vze7etcSAKAYcOGISQkBF27dsXt27cRFxcHNzc3bNq0CYMHD67y82fPnsXVq1fh6OiI0aNHq5SVlJQgNTUV7du35xNy76hph6xqChkAuHLlSt2sXCNSUFAABwcHuLq6qlw6VmrXrh0A4OXLl8Kyp0+fIi8vTy+/YVYH+1rNWFtbo0OHDnB1da1Qpux/mZmZAHhOrEpNjs3K+mnfvn1hZGQk1KHyK8GRkZGQSCSYOXNmhfKEhASYm5sLffZ96NztNiVPT094enrW+HPFxcUI/X0utFmzZlW4IpKcnIzS0lLY29tj69atOH/+PJ49ewaJRIIBAwbgm2++0dsn55QhqWnTpli6dClu3bqFnJwcODg4wNvbW2WwsbZOIaMNzM3NKx38HhcXBwAq30qVl/MlEgnWrl2L6OhovHjxAq1bt8bgwYMrDLTVJ+xrNbd+/Xq1Ze/2P54TK1eTYzMlJQUAVK52KllaWsLW1hYZGRnIyspCixYt6m8jtFRISAgUCgUmTpxYoY+9evUKz58/R+fOnXHgwAGcOHECjx8/RrNmzdC3b19MnDgRLVu2rPJ36OSVpNo4evQonj17BldXV9EnXpRBICoqCj/88APatm0LNzc35OXlYf/+/fDz80NOTk59r7ZWUJ4M/vWvf+H69evo3LkzXFxc8PDhQ4SEhGDBggUoKysDALx+/RrFxcVo3rw5TExMKrRlbGwMa2trFBYWIj8/v163Q5sVFxdj586dAIABAwYIy5X98t///jd++eUXSKVSuLq64sWLFwgPD8f06dOFN9LrG/a1uqNQKBAREQEA8PLyAsBzYlVqcmxmZWUBAGxtbUXbUi7Pzs6uhzXXbleuXMHdu3fRqlUreHt7VyhX7vf4+Hhs2bIFEolEeGDjyJEjGDNmDNLS0qr8PTp3JWnRokWIj4+vsl7//v2FQYdKCoUCP/zwA4DygV5ilEHA3d0d33//vfCkQm5uLv7v//4P169fx+rVqxEcHFybzdAKNd2Xyk45YsQI+Pv7C1fhEhIS8O233+L8+fP48ccfMXz48BpPIdPY59mrTb9UUigUWLFiBR4/fgxHR0f89a9/FcqU+37gwIFYtGiRcNsjPT0d8+bNQ0xMDMLCwjBr1qw62JrGRd/6miZt2bIFt27dgkQiEYYi6NM58X3U5NhUTpel7qovp9X6nwMHDgAAfH19RcfAKvulVCpFSEiIMHRBJpNh5cqVOH36NBYtWoS9e/dW+nt0LiQ9f/68WulQeT/9bVeuXMGjR4/g4OAgjFN41+zZs/HVV1/B1tYWFhYWwnJra2ssXboUw4YNw2+//YbMzEy13wYai5ruy127diE9PR1SqVTllkXHjh0xd+5czJs3Dz/99BOGDx+ud1PI1KZfAuWPZK9cuRKnTp2ClZUVgoOD0aRJE6F89erVePr0KRwcHFSultjb22PJkiUYPXo0jhw5ghkzZlRrUL0u0be+pinh4eHYs2cPmjRpglWrVglhSJ/Oie+jJsemoaFhpbd82U/LpaSk4Nq1a7C0tFT76o6RI0fCy8sLFhYWKq/wMTMzQ2BgIG7fvo34+HjcvXsXf/jDH9T+Lp07W1b1YqjKKJ8WGjx4sNpOamxsrPbdCi1btkSnTp2End+3b9/3XhdtUNN9aWZmJnovHQD69OkDIyMjpKWlQSaT6d0UMrXplzKZDIGBgbh06RKsrKywadMmdOjQQaWOqalphfeCKXXs2BGtWrVCRkYG0tLS1P4b6Sp962t1rbS0FGvXrsXhw4dhamqK4OBguLu7C+X6dE58HzU5Ns3MzJCXl4eioiLRq0nsp+XOnDkDoPyWr7p9YWRkJPrgC1B+VblHjx44efIk4uPjKw1JHJP0u9LSUly+fBlA+WXR96UcTKev4z/UMTY2hpWVFYDyfcMpZKonKysLkydPxqVLl9CqVSuEh4e/1xNsyn5ZWVDQVexr76+goABz587F4cOH0axZM2zcuFF4GW918ZxYubePTeWVNuXYpHcprzTr+6Dt8+fPA6ifv9UMSb+7e/cuXr9+DUdHxwrf0t+2bt06zJs3T+3AufT0dADQu3fVPHv2DMuXL8fKlStFywsKCpCTkwNTU1NYWVkJU8jI5XI8evSoQv13p5DRR8+ePcP48eMRHx8PZ2dn7NixQ3R/5OfnY9WqVfjuu+9EQwDwv35Znac5dA372vt5/fo1pkyZgujoaNjZ2SEiIkLlCpISz4nq1fTYVPbB1NTUCvXevHmDzMxM2NjY6HVIysjIQHJyMiwtLdGzZ0+19bZt24bvvvsOSUlJouXV7ZcMSb+7d+8eAFT5ttiYmBhcuHABly5dqlCWnJyMhIQENG/eXO/eV2NhYYETJ04gMjISjx8/rlB+4sQJAOXz7yin0lA+PaicLuZt704ho29evXqFGTNmID09Hd27d0dERATs7OxE65qbm+O3337DuXPncOvWrQrl0dHRyM3NhbOzs16GJIB9raZKSkowa9YsxMfHw9HREdu3b1cbInlOVK+mx2Zl/fTy5cuQy+V6309jY2MBAK6urpWOr0xKSsK5c+eEW3Nvy87OxtWrV2FsbCzM86YOQ9Lv7t+/D6D8DbyVUQ4S27p1Kx4+fCgsz8nJQVBQEORyOUaPHi36qLEus7Kywp/+9CcAwIoVK5CXlyeU3b9/H2FhYTA0NMS4ceOE5UOHDoWpqSn27t0r7H9AfAoZfbNmzRo8fvwYnTp1wsaNGyt94srAwECYNDgkJETlJZNPnjwRniry8/PT7EprMfa1mgkPD0dsbCzs7OwQFhamNqADPCdWpqbHppeXFyQSCY4dO4aoqCih7tOnT7F582YYGBjA19e3HrdA+9T0b/X+/ftx584dYXlBQQGWL1+O/Px8eHt7V/kwgUFubq5+D5P/nZ+fH+7du4d//vOflV7CKysrw8KFC3Hu3DmYmJjgo48+gpmZGW7evIn8/HwMHDgQy5cvV5l4VF/k5ORg0qRJSEtLQ/PmzdGtWzcUFBTg9u3bKCsrw5w5czB8+HCVz/z0009Ys2YNjI2N0bNnTygUCty4cQNyuRxLly6t1hvSdU1qaipGjBghTHCp7g+UtbU15syZA6D8vvrMmTNx584dmJubC1dEb968ieLiYvj6+url4/9vY1+rnlevXmHo0KEoKipC586dKx1+EBQUxHNiFWp6bF68eBHz589HWVkZ3N3dYW5ujuvXr6OwsBBTp07V6y87QPlUTWfOnEFgYKDKa1DEbNiwAQcOHIChoSG6desGa2tr3L59G7m5ufjoo48QGhpa6atBAIYkgY+PD9LT0/Hjjz9WOTOwQqHA4cOHERkZiZSUFBgaGkIqlcLb2xve3t56/cbeN2/eYO/evTh79iyeP38OMzMzdO3aFaNHj1Z7WfPSpUvYt28fHjx4ABMTE7i4uMDPzw+9evWq57XXDj///HO13inTpk0bREZGCv9fUlKCAwcO4NSpU3j8+DFMTEzQqVMnDB8+XHjxn75jX6tadHQ0AgICqlX32rVrAHhOrEpNj82YmBhs374dsbGxUCgUcHR0hK+vb60GKuuKqVOn4ubNmwgNDcUnn3xSZf0zZ87g0KFDSEhIgFwuh4ODAwYPHoyRI0dW63UoDElEREREIjgmiYiIiEgEQxIRERGRCIYkIiIiIhEMSUREREQiGJKIiIiIRDAkEREREYlgSCIiIiISUfWblIiItMSyZctw/PjxSusoX3BIRFRbDElE1KjY2NhU643kRES1xZBERI2Kcn4wIiJN45gkItI5U6ZMwZIlSxAYGIh+/frhm2++QXp6Onr16oWDBw9i5MiR8PT0xMGDBwGUzyweEBCAzz77DF5eXpg9ezaSkpKE9m7evIlevXohMjISn3/+Ofr374/z58831OYRUT3hlSQianRKS0tFlxsaGsLQsPy736+//oq+ffsiODgYJSUlQp1NmzYhICAAEokEHTt2xI0bN+Dv7w83NzcsWLAAJSUl2L17NyZMmICdO3dCKpUKnw0NDcW8efMgl8vRvXt3zW4kETU4hiQialRevHiB3r17i5aNGjVKmMFeoVBg8eLFsLS0BACkp6cDAD799FN8+eWXwmcWL14Me3t7bNq0SZgV3MPDA1988QXCwsKwZs0aoa6Pjw8GDRqkke0iIu3DkEREjYpEIsH69etFy1q0aCH8d5s2bYSA9DYnJyfhv2UyGeLi4jBu3DghIAGAlZUVPD09cenSJZXPOjs713b1iagRYUgiokbF2NgYH374YZX13g5M6pbn5eVBoVCI1m3RogXevHlTrTaJSDdx4DYR6a1mzZrBwMAAWVlZFcpevnyJ5s2bN8BaEZG2YEgiIr1lZmaGLl264OzZsyqDwfPy8hAVFQU3N7cGXDsiami83UZEjUpJSQlu376ttvztMUfVMW3aNAQEBGDmzJn46quvUFJSgj179qCoqAgTJ06s7eoSUSPGkEREjUpOTg4mTZqktnzjxo01aq9Xr17YvHkzIiIisHjxYpiYmKB79+5YtmwZB2oT6TmD3NxcRUOvBBEREZG24ZgkIiIiIhEMSUREREQiGJKIiIiIRDAkEREREYlgSCIiIiISwZBEREREJIIhiYiIiEgEQxIRERGRCIYkIiIiIhH/D5BECpQECAhoAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 576x576 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "figsize = (6, 6)\n",
    "\n",
    "# Calculate the residuals \n",
    "residuals = final_pred - y_test\n",
    "\n",
    "# Plot the residuals in a histogram\n",
    "plt.hist(residuals, color = 'red', bins = 20,\n",
    "         edgecolor = 'black')\n",
    "plt.xlabel('Error'); plt.ylabel('Count')\n",
    "plt.title('Distribution of Residuals');"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "残差接近正常分布，低端有几个明显的离群点。这表明模型的预测值有远低于真实值的错误。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 总结\n",
    "在这第一部分中，我们执行了机器学习流程中的几个关键：\n",
    "\n",
    "* 建立基础模型，比较多种模型性能指标\n",
    "* 模型超参数调参，针对问题进行优化\n",
    "* 在测试集上评估最佳模型\n",
    "\n",
    "结果表明，机器学习可以应用于我们的问题，最终的模型能够预测建筑物的能源之星的得分在9.1分以内。我们还看到，超参数调整能够改善模型的性能，尽管在时间投入方面要付出相当大的代价。这是一个很好的提醒，正确的特性工程和收集更多的数据（如果可能的话）比微调模型有更大的回报。我们还观察到运行时与精度的权衡，这是我们在设计机器学习模型时必须考虑的许多因素之一。\n",
    "\n",
    "我们知道我们的模型是准确的，但是我们知道它为什么会做出这样的预测吗？机器学习过程的下一步是至关重要的：试图理解模型是如何做出预测的。实现高精度是很好的，但是如果我们能够弄清楚为什么模型能够准确地预测，那么我们就可以利用这些信息来更好地理解问题。例如，该模型依赖哪些特征来推断能源之星分数？是否可以使用此模型进行特征选择，并实现更易于解释的简单模型？\n",
    "\n",
    "在最后的notebook中，我们将尝试回答这些问题，并从项目中得出最终结论。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.9"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
